- 链表问题常见操作关键字:长度、逆序、快慢指针或双指针、先走N步。例如:环形链表、相交链表等问题。
- 23. 链表中环的入口结点
- 24. 反转链表
- 25. 合并两个排序的链表
- 27. 二叉树的镜像
- 28. 对称的二叉树
- 29. 顺时针打印矩阵
- 30. 包含Min函数的栈
- 31. 栈的压入、弹出序列
- 32. 不分行从上往下打印二叉树
- 32-3. 之字形打印二叉树
- 33. 二叉搜索树的后序遍历序列
- 34. 二叉树中和为某一值的路径
- 35. 复杂链表的复制
- 36. 二叉搜索树与双向链表
- 37. 序列化和反序列化二叉树
- 38. 字符串的排列
- 39. 数组中出现次数超过一半的数字
- 40. 最小的k个数
- 41. 数据流中的中位数
- 42. 连续子数组的最大和
- 43. 1到整数N中1出现的次数
- 44. 数字序列中某一位的数字
- 45. 把数组排成最小的数
- 46. 把数字翻译成字符串
- 47. 礼物的最大价值
- 48. 最长不含重复字符的子字符串
- 49. 丑数
- 50. 字符串中第一个只出现一次的字符
- 51. 数组中的逆序对
- 52. 两个链表的第一个公共结点
- 53_01. 数字在排序数组中出现的次数
- 53_02. 0到n-1中缺失的数字
- 53_03. 数组中数值和下标相等的元素
- 54. 二叉搜索树的第k大结点
- 55_01. 二叉树的深度
- 55_02. 平衡二叉树
- 56_01. 数组中只出现一次的两个数字
- 56_02. 数组中唯一只出现一次的数字
- 57_01. 和为s的两个数字
- 57_02. 为s的连续正数序列
- 58_01. 翻转单词顺序
- 58_02. 左旋转字符串
- 59. 滑动窗口的最大值
- 60. n个骰子的点数
- 61. 扑克牌的顺子
- 62. *圆圈中最后剩下的数字
- 63. 股票的最大利润
- 64. 求连续自然数的和
- 65. 不用加减乘除做加法
- 66. 构建乘积数组
- 67. 有效的括号
- 68. 回文链表
- 69. 环形链表
- 70. 环形链表2(142)
- 71. 两数相加(2)
- 72. 两两交换链表中的节点(24)
- 73. 排序链表(148)
- 1. 有效的数独
- 2. 分发糖果
- 3. 不邻接植花
- 4. 按身高排序
- 5. 处理用时最长的那个任务的员工
- 6. 最大的K个数(优先级队列实现最小堆)
- 7. 距离相等的条形码(1054)
- 8. 蓄水(LCP33)
- 9. 二进制字符串前缀一致的次数(1375)
- 10. 和为K的子数组(560)
- 10. 合并区间(56)
- 11. 除自身以外数组的乘积(238)
- 12. 缺失的第一个正数(41)
- 13. 数组中的第K个最大元素(215)
注意要点:
- 计算中间值时不要溢出(mid = start + (end - start)/2)
- while结束条件(start <= end)
- start 或者 end 下一次位置时 mid +- 1
- 1. 在排序数组中查找元素的第一个和最后一个位置
- 2. 搜索旋转排序数组(33)
- 3. 搜索二维矩阵(74)
- 4. 寻找旋转排序数组中的最小值(153)
- 5. 寻找旋转排序数组中的最小值(162)
- 6. 二分查找(704)
- 7. 第一个错误的版本(278)
- 8. 搜索插入位置(35)
解题思路:注意利用前后指针、快慢指针。
- 1. 删除排序链表中的重复元素 II(82)
- 2. 三数之和(15)
- 3. 比较含退格的字符串(844)
- 4. 区间列表的交集(986)
- 5. 盛最多水的容器(11)
- 6. 有序数组的平方(977)
- 7. 轮转数组(189)
- 8. 移动零(283)
- 9. 两数之和 II - 输入有序数组(167)
- 10. 反转字符串(344)
- 11. 反转字符串中的单词 III(557)
- 12. 链表的中间结点(876)
- 13. 删除链表的倒数第 N 个结点(19)
- 14. 两数之和(1)
解题思路:找到窗口是关键,这个窗口可以是固定大小也可能是可变大小。
解题思路:变量保存访问信息!!! 深度(递归或者栈)或者广度(队列)优先搜索标记。
- 1. 岛屿数量(200)
- 2. 省份数量(547)
- 3. 填充每个节点的下一个右侧节点指针 II(117)
- 4. 另一棵树的子树(572)
- 5. 二进制矩阵中的最短路径(1091)
- 6. 被围绕的区域(130)
- 7. 所有可能的路径(797)
- 8. 图像渲染(733)
- 9. 岛屿的最大面积(695)
- 10. 合并二叉树(617)
- 11. 填充每个节点的下一个右侧节点指针(116)
- 12. 01 矩阵(542)
- 13. 腐烂的橘子(994)
- 14. 节点与其祖先之间的最大差值(1026)
- 15. 二叉树的最大深度(104)
- 16. 对称二叉树(101)
- 17. 二叉树的直径(543)
- 18. 将有序数组转换为二叉搜索树(108)
- 19. 验证二叉搜索树(98)
- 20. 二叉搜索树中第K小的元素(230)
- 21. 二叉树展开为链表(114)
- 22. 从前序与中序遍历序列构造二叉树(105)
- 23. 路径总和3(437)
- 24. 二叉树中的最大路径和(124)
解题思路:回溯的问题,可以先画出来深度优先搜索树,然后处理,递归,回溯(该撤销操作的一定要撤销)
- 1. 子集(78)
- 1. *无重复值的全排列(46)
- 2. 有重复值的全排列(47)
- 3. 组合总和(39)
- 4. 组合总和2(40)
- 5. 电话号码的字母组合(17)
- 6. 括号生成(22)
- 7. 单词搜索(79)
- 8. 合并两个有序链表(21)
- 9. *组合(77)
- 10. *字母大小写全排列(784)
- 11. 矩阵中的最短路径和(DFS&BFS)
- 12. 路径总和(112)
- 13. 复原IP地址(93)
解题思路:(最大最小问题?)找扩散转移方程、临界条件.dp 可能是一维的,也可能是二维的。 对于矩阵中的最短路径和,我们提供了高效的DP解法,以及DFS递归解法和BFS队列解法,可以作为典型来学习。
- 1. 打家劫舍 II(213)
- 2. 跳跃游戏(55)
- 3. 跳跃游戏 II(45)
- 4. 不同路径(62)
- 5. *最长回文子串(5)
- 6. 等差数列划分(413)
- 7. *解码方法(91)
- 8. *单词拆分(139)
- 9. *最长递增子序列(300)
- 10. **最长递增子序列的个数(673)
- 11. **最长公共子序列(1143)
- 12. 两个字符串的删除操作(583)
- 13. 编辑距离(72)
- 14. 零钱兑换(322)
- 15. 整数拆分(343)
- 16. 爬楼梯(70)
- 17. 打家劫舍(198)
- 18. 三角形最小路径和(120)
- 19. 按顺序填充书架(1105)
- 20. 杨辉三角(118)
- 21. 矩阵中的最短路径和
- 22. 最大子序和
- 23. 乘积最大子数组
- 24. 完全平方数(270)
- 25. 分割等和子集(416)