for i in range(len(nums)): sum_num += nums[i] while sum_num >= target: sub = i - left + 1 res = min(res, sub) sum_num -= nums[left] left += 1
链表
虚拟头节点
1 2 3 4 5
dummy = ListNode(0) dummy.next = head cur = dummy ... return dummy.next
反转链表
1 2 3 4 5 6 7 8
pre = None cur = Head
temp = cur.next cur.next = pre
pre = cur cur = temp
环形链表
1 2 3 4 5 6 7 8 9 10 11
while fast and fast.next: slow = slow.next fast = fast.next.next if slow == fast: p = head q = slow while p != q: p = p.next q = q.next return p return None
win, ret = [], [] for i, v in enumerate(nums): if i >= k and win[0] <= i - k: win.pop(0) while win and nums[win[-1]] <= v: win.pop() win.append(i) if i >= k - 1: ret.append(nums[win[0]]) return ret ``` 在使用单调栈的时候首先要明确如下几点:
```python3 """生成next数组 def getnext(self,a,needle): next=['' for i in range(a)] j,k=0,-1 next[0]=k while(j < len(needle)-1): if k==-1 or needle[k]==needle[j]: k+=1 j+=1 next[j]=k else: k=next[k] return next """匹配字符串 a=len(needle) b=len(haystack) if a==0: return 0 i=j=0 next=self.getnext(a,needle) while(i<b and j<a): if j==-1 or needle[j]==haystack[i]: i+=1 j+=1 else: j=next[j] if j==a: return i-j else: return -1
def averageOfLevels(self, root: Optional[TreeNode]) -> List[float]: res = [] stack = [root] while stack: mean = 0 count = 0 for _ in range(len(stack)): node = stack.pop(0) count += 1 mean += node.val if node.left: stack.append(node.left) if node.right: stack.append(node.right) res.append(mean / count) return res