前200道Leetcode总结

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,方法基本同上,区别就是增加了一重循环,另外重复值只考虑第一层

扫描二维码关注公众号,回复: 6044372 查看本文章

    第三题: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'('

未完待续

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/maryhaocoolcool/article/details/87281741