我胡汉三又回来了 !!!141 - 148
唉 人总是幻想以后的自己会更好 ,实际上 你现在是什么样 大概率你后面就是什么样子 。 我总是想年后一定全新学习,天天早睡早起,锻炼身体,可是过完年依然得过且过,blabla。定目标 就要定当下的目标!!!
不过至少过年的时候力扣没落下
141 环形链表 。
是否有环 快慢指针 经典
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def hasCycle(self, head: Optional[ListNode]) -> bool: if head == None: return False q = s = head while q.next != None: q = q.next s = s.next if q.next: q = q.next else: return False if q == s: return True return False 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/linked-list-cycle/solution/yi-kuai-da-man-gong-qi-bu-bei-by-yizhu-j-howw/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
142 找环入口 这也算经典题目了
但是我一直不会 数学问题真的都好难
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def detectCycle(self, head: ListNode) -> ListNode: if head == None: return None q = s = head while q.next != None: q = q.next s = s.next if q.next: q = q.next else: return None if q == s: s = head while q != s: q = q.next s = s.next return q return None 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/linked-list-cycle-ii/solution/shuang-zhi-zhen-a-shuang-zhi-zhen-yi-yu-4w15e/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
143 重排链表
思路就是 找到后一半 然后后一半反向 再把两段拼起来。
# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def reorderList(self, head: ListNode) -> None: """ Do not return anything, modify head in-place instead. """ if not head : return head n = 0 p = head while p != None: n += 1 p = p.next i = 1 p = q = head while i < (n+1)//2: #将q指向后半段开头的前一个 q = q.next i += 1 #将后半段反向 r = q.next q.next = None while r != None: temp = r.next r.next = q.next q.next = r r = temp temp = q q = q.next temp.next = None #将两段拼起来: r = p p = p.next while p != None: r.next = q r = r.next q = q.next r.next = p r = r.next p = p.next if q : r.next = q return head 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/reorder-list/solution/bei-jue-da-duo-shu-ren-ji-bai-by-yizhu-j-8y6m/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
144:
二叉树的前序遍历
简简单单的递归
# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]: rel = [] def preorder(root): rel.append(root.val) if root.left: preorder(root.left) if root.right: preorder(root.right) if root: preorder(root) return rel 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/binary-tree-preorder-traversal/solution/jian-dan-de-di-gui-bu-jian-dan-de-yi-tia-6rvl/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
145:
后序 简单的递归
# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]: rel = [] def postorder(root): if root.left: postorder(root.left) if root.right: postorder(root.right) rel .append(root.val) if root : postorder(root) return rel 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/binary-tree-postorder-traversal/solution/wei-shi-yao-zhe-shi-wei-shi-yao-by-yizhu-l6av/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
146:LRU 不多说 有点好玩
class LRUCache: def __init__(self, capacity: int): self.dict1 = {} self.room = capacity self.left = linknode(-1,-1) self.right = linknode(-1,-1,pri=self.left) self.left.next = self.right def addlink(self,pri,next,mid): pri.next = mid next.pri = mid mid.next = next mid.pri = pri def dellink(self, mid): mid.pri.next = mid.next mid.next.pri = mid.pri def move2right(self,mid): self.dellink(mid) self.addlink(self.right.pri,self.right,mid) def get(self, key: int) -> int: if key in self.dict1: self.move2right(self.dict1[key]) return self.dict1[key].value else: return -1 def put(self, key: int, value: int) -> None: if key not in self.dict1: # if len(self.dict1) == 0: #如果是第一个节点 那么就变成l - KEY - r这样的结构 # self.addlink(self.left,self.right,self.dict1[key]) # elif len(self.dict1) == self.room: if len(self.dict1) == self.room: #如果满了 就删除最左边这个结点 ,把新结点挂在最右边 self.dict1[key] = linknode(key, value) del self.dict1[self.left.next.key] self.dellink(self.left.next) self.addlink(self.right.pri,self.right,self.dict1[key]) else: #如果没满 就单纯的挂在右边就好。 self.dict1[key] = linknode(key, value) self.addlink(self.right.pri, self.right, self.dict1[key]) else: #如果已经存在 修改键值 并放在最后 self.dict1[key].value = value self.move2right(self.dict1[key]) class linknode: def __init__(self, key=-1,value=0, pri=None,next=None): self.key = key self.value = value self.next = next self.pri = pri # Your LRUCache object will be instantiated and called as such: # obj = LRUCache(capacity) # param_1 = obj.get(key) # obj.put(key,value)
class LRUCache: def __init__(self, capacity: int): self.dict1 = {} self.room = capacity self.left = linknode(-1,-1) self.right = linknode(-1,-1,pri=self.left) self.left.next = self.right def addlink(self,pri,next,mid): pri.next = mid next.pri = mid mid.next = next mid.pri = pri def dellink(self, mid): mid.pri.next = mid.next mid.next.pri = mid.pri def move2right(self,mid): self.dellink(mid) self.addlink(self.right.pri,self.right,mid) def get(self, key: int) -> int: if key in self.dict1: self.move2right(self.dict1[key]) return self.dict1[key].value else: return -1 def put(self, key: int, value: int) -> None: if key not in self.dict1: # if len(self.dict1) == 0: #如果是第一个节点 那么就变成l - KEY - r这样的结构 # self.addlink(self.left,self.right,self.dict1[key]) # elif len(self.dict1) == self.room: if len(self.dict1) == self.room: #如果满了 就删除最左边这个结点 ,把新结点挂在最右边 self.dict1[key] = linknode(key, value) del self.dict1[self.left.next.key] self.dellink(self.left.next) self.addlink(self.right.pri,self.right,self.dict1[key]) else: #如果没满 就单纯的挂在右边就好。 self.dict1[key] = linknode(key, value) self.addlink(self.right.pri, self.right, self.dict1[key]) else: #如果已经存在 修改键值 并放在最后 self.dict1[key].value = value self.move2right(self.dict1[key]) class linknode: def __init__(self, key=-1,value=0, pri=None,next=None): self.key = key self.value = value self.next = next self.pri = pri # Your LRUCache object will be instantiated and called as such: # obj = LRUCache(capacity) # param_1 = obj.get(key) # obj.put(key,value)
147:
对链表插入排序
简单题 但是得好好想想边界条件
class Solution: def insertionSortList(self, head: ListNode) -> ListNode: if not head: return head post = ListNode(val = -1,next=head) p = head.next r = head r.next = None while p != None: temp = post while p.val > temp.next.val: temp = temp.next #找到P插入的位置 if temp.next == None: break q = p.next #記錄p的下一个 p.next = temp.next temp.next = p p = q return post.next 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/insertion-sort-list/solution/zen-yao-zhe-yao-duo-ren-ji-bai-wo-by-yiz-bfvu/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
148 排序链表
我太懒了 所以我直接化身CV工程师
# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def sortList(self, head: Optional[ListNode]) -> Optional[ListNode]: def merge(head1: ListNode, head2: ListNode) -> ListNode: dummyHead = ListNode(0) temp, temp1, temp2 = dummyHead, head1, head2 while temp1 and temp2: if temp1.val <= temp2.val: temp.next = temp1 temp1 = temp1.next else: temp.next = temp2 temp2 = temp2.next temp = temp.next if temp1: temp.next = temp1 elif temp2: temp.next = temp2 return dummyHead.next if not head: return head length = 0 node = head while node: length += 1 node = node.next dummyHead = ListNode(0, head) subLength = 1 while subLength < length: prev, curr = dummyHead, dummyHead.next while curr: head1 = curr for i in range(1, subLength): if curr.next: curr = curr.next else: break head2 = curr.next curr.next = None curr = head2 for i in range(1, subLength): if curr and curr.next: curr = curr.next else: break succ = None if curr: succ = curr.next curr.next = None merged = merge(head1, head2) prev.next = merged while prev.next: prev = prev.next curr = succ subLength <<= 1 return dummyHead.next 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/sort-list/solution/wo-hao-lan-zhen-de-by-yizhu-jia-line/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。