1. String
13.Implement strStr()
KMP算法
171.Anagrams
对之前代码对改进:
item_ = str(sorted(item))
注意要转换成string,因为list不能作为dictionary对hash表的key。
79. Longest Common Substring
再看一次还是没有思路,·
自己之前是用暴力做的。
但是现在看起来是一个典型的DP问题。
但是没想太好状态是怎么转变的-> 很简单。自己想多了。
78. Longest Common Prefix
可以用二分。但是蛮复杂的感觉不是很有必要。
2. Integer Array
78. Longest Common Prefix 游标x2/交换
记得python可以直接pop(index)
还有一种思路,是类似于快排的方法。
将相等的数置换到队尾,因为最后inplace的结果,只看前面
138. Subarray Sum 前缀和数组
想用list的index,但是好像不太好用的样子。
100. Remove Duplicates from Sorted Array 游标/交换
直接用list.pop(index)
其他人的做法,有一个游标,用来找到下一个和当前位置不等的数,并将这个数与当前位置的数进行交换
64. Merge Sorted Array 游标
队尾两个游标,从A, B中选取较大的一次填充到队尾
56. Two Sum hash表
50. Product of Array Exclude Itself 前缀积和后缀积,相乘
189. First Missing Positive 交换
将索引和数字匹配
59. 3Sum Closest 游标
固定最左边,left起始位置在固定点的相邻左侧,right在最右边
固定点从左到右移动。
15.3Sum
类似于上一题
3. Binary Search
141. Sqrt(x)
60. Search Insert Position
28. Search a 2D Matrix
把二维数组展开,用二分法,然后重写换算成二维数组的形式。
14. First Position of Target
159. Find Minimum in Rotated Sorted Array
很简单,只要找到第一个不是递增的就是了。
75. Find Peak Element
注意边界情况(然而边界情况被题目排出了,就比较好算)
74. First Bad Version
也是用二分法来找,但是我一开始还费劲吧啦地讨论前一个是false,后一个是true才是满足条件。后来看发现只需要是false右移,是true左移,最后l==r的时候,这个数就是结果。
62. Search in Rotated Sorted Array
分情况讨论,
61. Search for a Range
分两个二分法查找
183. Wood Cut
选取最大的木头,二分查找所有可能的情况,得到第一个可以的
4. Math & Bit Manipulation
181. Flip Bits 负数
负数处理方法:
ff = pow(2, 32)
a_r = (a+ff)%ff
142. O(1) Check Power of 2 **
这个做法也太巧妙了吧!利用了2的幂在二进制条件下的特殊形式。
由此可以推广到n进制(?
2. Trailing Zeros
只需要考虑5的情况,每个5都能产生一位0
179. Update Bits
163. Unique Binary Search Trees
递归
140. Fast Power
只需要考虑不整整除的部分,在每一次幂运算后的变化
180. Binary Representation
这道题要注意小数运算的问题
字符转化成浮点数
5. Greedy
82. Single Number 利用了异或两两抵消
所有元素与0异或,最后的结果是缺少的元素
46. Majority Element
O(nlogn)的话,可以先sort,再求二分之一
如果是O(n)的情况,可以利用主元素的性质,遍历每个元素,存储第一个元素,并与后面的元素比较,如果该元素等于存储的元素,count+1,否则减1,并将存储的元素替换为当前元素。最终留下的元素肯定是主元素。
187. Gas Station
因为是循环,所以可以计算从第一个开始,到最后一个的情况,然后找一个最低的位置,以他后一个开始。因为他们的相对情况是不变的。
184. Largest Number
182. Delete Digits
数学关系
- 每次操作都争取找最小的数
- 对每次找数时,应该删掉第一个比后面的数大的,因为前一位有进制的加成,肯定比后面的好。