贪心算法
455. 分发饼干 | 优先给胃口最小的孩子分配小饼干 |
135. 分发糖果 | 不需要排序,从左到右,从右到左各遍历一遍 |
二分查找
69.Sqrt(x) | 牛顿迭代法 |
34. 在排序数组中查找元素的第一个和最后一个位置 | 使用二分法实现c++中的lower_bound(返回有序数组中第一个>=target的元素)和upper_bound函数(返回有序数组中第一个>target的元素),如果不存在时均返回end |
双指针
167. 两数之和 II - 输入有序数组 | 反向双指针,注意下标从1开始 |
88. 合并两个有序数组 | 三个指针 |
142. 环形链表 II | 快慢指针相遇位置到入环节点的距离 == 头结点到入环节点的距离 |
633. 平方数之和 | 注意测试用例中输入数值较大,需要使用unsigned int类型 |
76. 最小覆盖子串 | 使用数组表示字符串中字符的数量,使用bool字符数组表示是否存在该字符(题目比较绕) |
680. 验证回文字符串 Ⅱ | 题目中强调仅删除1个字符,所以可以通过回文字符串判断子函数来实现 |
3. 无重复字符的最长子串 | 经典的滑动窗口题目 |
154. 寻找旋转排序数组中的最小值 II | 解法简单,思路不容易想到 |
540. 有序数组中的单一元素 | 同向双指针,需要注意数组中仅有一个元素和仅剩最后一个元素的情况 |
4. 寻找两个正序数组的中位数 | 创建一个新的all数组,将两个数组合并为一个新的数组后,判断奇偶,注意奇偶判断并返回的简化过程并不是直接写出来的,而是复杂版的优化 |
二叉树
- 满二叉树与完全二叉树
- 二叉搜索树
- 平衡二叉树(AVL树),空树或者左右两个子树的高度差不超过1,并且左右两个子树也是平衡二叉树
- 二叉树存储方式
144. 二叉树的前序遍历 | 递归+统一迭代法(stack) |
94. 二叉树的中序遍历 | 递归+统一迭代法(stack) |
145. 二叉树的后序遍历 | 递归+统一迭代法(stack) |
102. 二叉树的层序遍历 | 层序遍历的根基(queue) |
107. 二叉树的层序遍历 II | 层序遍历后的结果翻转一下 |
199. 二叉树的右视图 | 层序遍历每一层时仅将每层的最后一个元素保留 |
637. 二叉树的层平均值 | 将每层数据加起来,然后求平均 |
429. N 叉树的层序遍历 | 每层子节点不再是仅存在左右子节点,而是需要for循环遍历所有子节点 |
515. 在每个树行中找最大值 | 遍历每行数组时,进行比较,仅保留当前行的最大值 |
116. 填充每个节点的下一个右侧节点指针 | 创建prenode和node两个节点 |
117. 填充每个节点的下一个右侧节点指针 II | 与上题一样 |
450. 删除二叉搜索树中的节点 | |
530. 二叉搜索树的最小绝对差 | 将二叉树遍历问题转化为中序遍历后有序数组中查找相邻元素绝对值最小值的问题 |
- 二叉搜索树是有序的,在二叉搜索树上求最值,差值问题都可以通过中序遍历转化为在有序数组中求最值,差值的问题
深度优先遍历
695. 岛屿的最大面积 | 递归实现深度优先搜索 |
417. 太平洋大西洋水流问题 | 从边界向中间,使用深度优先搜索 |
剑指 Offer II 116. 朋友圈 | 外层遍历行,dfs遍历列 |
463. 岛屿的周长 | 岛屿的周长 = 岛屿到水域的步数 + 岛屿到边界的步数 |
广度优先遍历
1263. 推箱子 | 1.遍历查找人和箱子的位置,记录并将其变为通行区域;2.从人位置出发进行广度优先遍历,需要注意遍历到箱子位置时,当且仅当箱子后方为通行区域时才是一条合法路径 |
动态规划
基础问题
509. 斐波那契数 | |
70. 爬楼梯 | |
746. 使用最小花费爬楼梯 | |
62. 不同路径 | |
63. 不同路径 II | |
343. 整数拆分 | |
96. 不同的二叉搜索树 |
01背包问题
416. 分割等和子集 | 等和子集转化为01背包 |
1049. 最后一块石头的重量 II | 最后剩余石头质量最小 == 将石头尽可能分成相等的两堆 == 背包为sum/2的大小,找最接近背包容量的石头重量和 |
494. 目标和 | 将所有数字分成两项,左侧和右侧,left = (sum + target) / 2,求有多少种=left的组合,动态规划求组合通用dp[i] += dp[i-nums[i]] |
474. 一和零 | 背包有两个限制:0的最大个数限制和1的最大个数限制,元素有两个信息:0的个数和1的个数 |
完全背包
518. 零钱兑换 II | 先物品,后容量,求组合;先容量,后物品,求排列 |
377. 组合总和 Ⅳ | 求排列问题,结果要符合32位整数范围 |