算法复习-面试HOT
包含HOT100,HOT150,剑指offer,分类存放
快速复习思路/代码注意事项,防遗忘
哈希
49. 字母异位词分组
题面:
1 | 输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"] |
思路:排序过后的字符串(标准顺序)作哈希表的 $key$ 当做一组。
128. 最长连续序列
题面:序列不要求位置连续
1 | 输入: nums = [100,4,200,1,3,2] |
思路:使用哈希表存储所有数字,然后对每个数检查其是否为连续序列的起始点(即该数减1不在哈希表中),如果是,则向后查找连续的数字并计算长度。
双指针
283. 移动零
题面:把数组中的0移动到末尾,保持非零元素的相对顺序不变。
1 | 输入: nums = [0,1,0,3,12] |
思路:$write,read$ 双指针
11. 盛最多水的容器
题面:给定一个数组,找到两条线段,使得它们与 $x$ 轴形成的容器可以容纳最多的水。
思路:$left,right$ 双指针指向两侧,向内移动较短的指针。短线是可以舍弃的,因为宽度永远在变小,所以短板那根线不参与构成更大的面积,往里移动线只可能是在寻找更高的线段来增加面积。
42. 接雨水
1. 两数之和
排序+双指针,通过左右和与$target$比较来移动指针,注意去重。
15.三数之和
滑动窗口
3. 无重复字符的最长子串
438. 找到字符串中所有字母异位词
76. 最小覆盖子串
子串
560. 和为K的子数组
有负数时不能用滑动窗口单调扩张收缩。使用前缀和,二重循环找是 $O(n^2)$,使用哈希表存储前缀和出现的次数,可以在 $O(n)$ 时间内找到满足条件的子数组数量。
栈队列
239. 滑动窗口最大值
单调队列
496. 下一个更大元素 I 739. 每日温度
单调栈寻找数组中每个元素右侧第一个比它大的元素,类似排队向右看第一个更高的人,自右向左构造单调栈
数组
53. 最大子数组和
两种方法:前缀和+贪心/动态规划(DP)
56. 合并区间
思路:排序区间起点,然后判断终点是否落在前一个区间内,更新前一个区间的终点,否则加入结果。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 魔法使的后花园!

