Leetcode总结
1.Two Pointers + HASH
SUMS 类型:
第一题:.Two SUMS: Hash,快速匹配目标值。注:map.count() 元素的个数
第十五题:3SUMS:
Two Pointers,1.三层重复值跳过,i+left+right;2.排序后当前值大于目标值提前退出
注:也可以用Hash,但是复杂度不会有变化 N^2,还有一个小弊端就是第一层重复值不能跳过
第十六题:3SUMS CLOSEST:
Two Pointers,方法基本同上,区别就是要设置初始值方便后面比较
第十八题:4SUM:
Two Pointers,方法基本同上,区别就是增加了一重循环,另外重复值只考虑第一层?
第三题:Longest Substring WithoutRepeating Characters
Two Pointers+HASH,用两个指针(left,right)一直保持在非重复区间,区间内数值用hash存储。
注:map.find()!=map.end map.erase()
2.ListNode类型:
第二题:Add Two Numbers
本题需要考虑进位,设置一个单独的进位变量;另外把l1和l2更长的再加上就行了
3.二分法:复杂度log(m+n)
第四题: Median of Two Sorted Arrays,
求两个排序合并后的第K值,即是删除前k-1数的留下的第一个值。二分法是按照例如k/2删数,直到删到目标个数为止。
注:一个序列为空,返回第二个序列的k-a值,a为已删个数;k==1 k/2==0 不能继续删,直接返回两个序列中最小的第一个
4.动态规划 DP :
第五题 : Longest Palindromic Substring
注意找到DP的关系式:dp[j][i]=(s[i]==s[j]&&(i-j<2||dp[j+1][i-1]))
17,Letter Combinations of a Phone Number
此问题显然用递归+DFS。若用for循环遍历,每次找到都得从头开始找 ,回溯节省了共同子序列的时间。
19.Remove Nth Node From End of the List
本题要求一遍遍历,像这种情况一般需要两个快慢指针,一个先前到达位置,另一个从头开始。
20.Valid Parentheses
本题是符号配对,这种情况应该第一想到栈,push '(', if ')',top=='('? pop'('
未完待续