001.Two Sum
一、bruteforce:O(n**2) O(1)
二、两边哈希表、一遍哈希表 O(n) O(n)
015.Three Sum
一、bruteforce:O(n**3) O(1)
二、排序+双指针:O(n**2) 去重/剪枝
Four Sum 排序+双层循环+双指针
020.Valid Parentheses
栈 O(n) O(n)
扩展:只有一种括号?
最长有效括号?leetcode 32.
021.Merge Two Sorted Lists
双指针 O(n+m) O(1)
递归 O(n+m) O(n+m)
025.Reverse Nodes in k-Group
先找到k个节点结束位置next_head,然后循环翻转,每次反转同时next_head指针后移,当第一组节点反转完成之后,下一组k个节点就有找到了。注意最后一组不够k个的处理。 一遍遍历O(n)
053.Maximum Subarray
global和local的使用/滑动窗口
066.Plus One
从后往前遍历,不需要进位直接返回,需要进位,前一位加一继续循环
098.Validate Binary Search Tree
中序遍历、递归(需要设置上下界)
110.Balanced Binary Tree
递归:自顶向下O(nlogn)、自底向上(优化:每次保存上一次计算得到的高度值)(O(n))
134.Gas Station*********
一次遍历 total cur 一次遍历、贪心 cur保证当前,tptal保证全局
136.Single Number
某个数字只出现一次,其余数字出现两次 异或
137.Single Number Ⅱ
?
146.LRU Cache
一、OrderedDict
二、set+双向链表
206.Reverse Linked List
prev、cur、nxt指针的使用
215.Kth Largest Element in an Array
堆排/快排
232.Implement Queue using Stacks
一个进一个出
328.Odd Even Linked List
原地
415.Add Strings
进位,python不需要考虑溢出
470.rand7() rand10()
拒绝采样,7*7=49,拒绝大于10的,idx=1+(idx-1)%10
496.Next Greater Element Ⅰ
先找出数组2中的元素的下一个更大元素,并存入字典中,再去遍历数组1
716.Max Stack
双栈 peekMax() popMax() popMax()时候如果两个栈栈顶元素不一样则pop并保存,找到相同的pop,然后将保存的元素重新push到两个栈中
860.Lemonade Change
贪心 five、ten计数
862.Shortest Subarray with Sum at least K
滑动窗口、记录
876.Middle of the Linked List
快慢指针
946.Validate Stack Sequences
重新进栈、与另一个对比,栈顶元素相同则pop