跳到主要内容

Hot 100

哈希

题目思路
1. 两数之和 - 力扣(LeetCode)过去的数存在哈希表中
49. 字母异位词分组优化哈希的键为 []int
128. 最长连续序列上一个不存在于哈希表

双指针

题目思路
283. 移动零一个指针找最新的数,一个指针找 0 的左边
42. 接雨水 - 力扣(LeetCode)双指针+双 Max,哪边小移哪边,leftMax-height[left]
11. 盛最多水的容器哪边矮,移动哪边的指针
15. 三数之和 - 力扣(LeetCode)先排序,之后跳过

滑动窗口

普通数组

题目思路
53. 最大子数组和 - 力扣(LeetCode)f(i)=max{f(i1)+nums[i],nums[i]}f(i)=max\{f(i−1)+nums[i],nums[i]\}
56. 合并区间 - 力扣(LeetCode)先按照左区间排序,再从左往右检查。需要注意 Go 语言中支持 Lambda 函数的排序方法是:slices.SortFunc(items, func(a, b []int) int { return a[0] - b[0]; })
189. 轮转数组 - 力扣(LeetCode)三次翻转,第二种做法很复杂没看
238. 除自身以外数组的乘积两个指针从一头到另一头,左边的乘积和右边的乘积,先计算结果,之后再乘上自己,从而忽略自身。

矩阵

题目思路
54. 螺旋矩阵 - 力扣(LeetCode)模拟,记得在循环中间判断 left == right or top == bottom 然后退出
73. 矩阵置零 - 力扣(LeetCode)这点空间复杂度真的有必要么?内存现在不缺了

链表

题目思路
160. 相交链表A+B=B+AA+B=B+A
234. 回文链表反转一半的链表
142. 环形链表 II先快慢指针,再让一个新指针从起点出发,直至和 slow 相遇。
19. 删除链表的倒数第 N 个结点first 先走 n 个节点,设置 dummy 节点便于边界条件

回溯

题目思路
79. 单词搜索 - 力扣(LeetCode)check(i, j, k) 表示在[i,j]处出发能否找到 word[k:]的剩余部分,并标记 visited 数组。优化可以从单词数量、

技巧

题目思路
169. 多数元素 - 力扣(LeetCode)排序后,取 1/2 的位置的元素