今日收获:
1.如果你在任何事情上能进行一万次纠错,你就会成为这方面的专家。-纳瓦尔
2.有些东西你不去创造,就不会存在。 所有的欣慰都源于愤怒。
3.很多东西在你不太懂的情形之下,它也会慢慢发酵。所以我一直跟我的研究生说,有一些讲座,你一定要去听。 你听了第一次,不懂没关系,你第二次再去的话,你会觉得你多懂了一点,听过几次以后,你就可能慢慢的懂了。 我把这个叫做渗透性的学习方法。 这个渗透性的学习方法是中国传统上是不赞成的,但我认为这是一个非常重要的学习方法。 —— 杨振宁
第一点和第三点,其实有点殊途同归的意思了。我们都知道知行合一,这是第一层。但是很少有人知道第二层,行知合一,更进一步,先行后知,在干中学。
今日刷题——算法题_1. 合并K个升序链表
给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。
示例 1:
输入:lists = [[1,4,5],[1,3,4],[2,6]]
输出:[1,1,2,3,4,4,5,6]
解释:链表数组如下:
[
1 -> 4 -> 5,
1 -> 3 -> 4,
2 -> 6
]
将它们合并到一个有序链表中得到。
1 -> 1 -> 2 -> 3 -> 4 -> 4 -> 5 -> 6
我的题解:
class ListNode:#自己写的链表节点类
def __init__(self, val=0, next=None):#初始化链表节点
self.val = val
self.next = next
def __str__(self):#打印链表
current=self
result=[]
while current:#遍历链表
result.append(str(current.val))#将当前节点的值添加到列表中
current=current.next##将当前节点指向下一个节点
return "->".join(result)#将列表中的值用"->"连接起来,返回一个字符串表示链表
class Solution:#定义一个合并链表的类
def merge_K_lists(self,lists,k):
result=[]#定义一个空列表,用于存储合并后的链表
for i in range(len(lists)):
for j in range(len(lists[i])):
result.append(lists[i][j])
result.sort()
linklist=convert_list(result)#把合并后的链表转换为链表
return linklist#返回合并后的链表的头节点
def convert_list(arr):#把列表转换为链表
if not arr:
return None#如果数组为空,返回None
head=ListNode(arr[0])#定义一个虚拟头节点,初始值为数组的第一个元素
current=head#定义一个当前节点,初始值为头节点
for val in arr[1:]:#遍历数组
current.next=ListNode(val)#将当前节点的下一个节点指向下一个节点
current=current.next#将当前节点指向下一个节点
return head#返回头节点
if __name__=="__main__":
lists=[[1,4,5],[1,3,4],[2,6]]#定义一个链表的列表
k=3#定义链表的个数
solution=Solution()#创建一个合并链表的对象
merged_list = solution.merge_K_lists(lists, k) #合并链表
# merged_list1=[convert_list(list1) for list1 in lists] #将列表转换为链表
print(merged_list) #打印合并后的链表