数组
一个简单的表格是这么创建的:
Description | Solution |
---|---|
数组重复数 | hashmap、排序、二分变形 |
0放到数组尾 | 双指针、冒泡 |
集合交集 | 哈希、排序 |
除自身以外数组的乘积 | 乘积=当前数左边的乘积*当前数右边的乘积 |
搜索数字在有序数组插入位置 | 二分 |
旋转数组查找 | 两次二分 |
数组超过一半的数字/求众数 | hashmap、排序 |
从小到大输出N个丑数 | 试除法、迭代 |
奇数位于偶数前 | 快排思想 |
第k小的数 | 快排划分数组 |
TopK、第K大的数 | 全排序、局部排序、堆、快排思想 |
旋转数组 | 三次旋转 |
斐波那契数列 | 迭代、递归、剪枝递归、通项公式、矩阵快速幂 |
统计邻居状态 | neighbor函数、CNN卷积 |
字符串
Description | Solution |
---|---|
压缩字符串 | list辅助记录cnt |
实现字典树、后缀树 | 字典树 |
反转单词顺序 | 字符串基本操作(StringBuilder) |
数字
Description | Solution |
---|---|
n的平方根 | 二分、牛顿法 |
数字的整数次方 | 二分快速幂 |
3sum/3sum closet | 排序+双指针 |
剪绳子(给定和求最大积) | 分解为2和3 |
数字二进制中1的个数 | 右移位运算 |
链表
Description | Solution |
---|---|
删除重复节点I / 删除重复节点II | 使用头节点,更新pre.next即可 |
反转链表 | 使用头节点和辅助节点tmpNode=cur.next |
删除链表倒数第N个节点 | 使用头节点的快慢双指针 |
相交链表 | hashmap、双指针 |
环形链表 | hashmap、快慢双指针 |
链表中间节点 | 快慢指针 |
合并两个有序链表 | 向新链表添加较小的节点 |
链表重排序 | 找中间节点、反转和合并的组合 |
二叉树
Description | Solution |
---|---|
二叉树非递归遍历 | 前序中序后序 |
二叉树的最大/最小深度/路径和/路径和II | 层次遍历 |
之字层次遍历/层次打印二叉树 | 双栈/双队列层次遍历 |
前中序重建二叉树 | 递归 |
二叉搜索树第K个节点 | 中序遍历 |
二叉树的直径 | 后序遍历 |
排列组合
Description | Solution |
---|---|
电话号码字母组合/字母大小写全排列 | 集合选择元素组合 |
子集/子集II | 每次复制当前res所有list,并添加新的元素扩张res |
全排列/全排列II | “见缝插数” |
DP
Description | Solution |
---|---|
兑换最少的零钱 | 完全最小背包 |
分割等和子集 | 01最大背包 |
最长重复子数组 | dp[i][j]=dp[i+1][j+1]+1 |
最长连续递增序列 | dp[i]=dp[i-1]+1 |
最大子序列和/最大序列乘积 | dp[i]=num[i]+dp[i-1] |
跳台阶/斐波那契数列 | dp[i] = dp[i-1]+dp[i-2] |
按摩师/打家劫舍 | dp[i] = max(dp[i - 1], dp[i - 2] + nums[i]) |
堆、栈、快排
Description | Solution |
---|---|
最小栈 | 辅助最小栈 |
栈实现队列 | 辅助栈 |
数据流的中位数 | 大小堆 |
快速排序 |
其他
Description | Solution |
---|---|
矩形是否相交/矩形相交面积 | IoU相关 |
最小编辑距离 | NLP相关 |
统计邻居状态 | neighbor函数、CNN 卷积 |
使数组唯一的最小增量 | 贪心 |
gcd/lcm/贝祖定理 | 最大公约数、最小公倍数、二元一次方程解 |
数组最大公约数 | tmp=gcd(tmp,x) |
腐烂的橘子、最远的海洋、机器人的运动范围 | BFS模板题 |