哈希表
题目
1.两数之和
12. 整数转罗马数字
13. 罗马数字转整数
17. 电话号码的字母组合
49. 字母异位词分组
41. 缺失的第一个正数
36. 有效的数独
链表
题目
2.两数相加
19. 删除链表的倒数第 N 个结点
21. 合并两个有序链表
23. 合并K个升序链表
24. 两两交换链表中的节点
25. K 个一组翻转链表
滑动窗口
题目
3. 无重复字符的最长子串
30. 串联所有单词的子串
76. 最小覆盖子串
二分查找
题目
4. 寻找两个正序数组的中位数
29. 两数相除
33. 搜索旋转排序数组
34. 在排序数组中查找元素的第一个和最后一个位置
35. 搜索插入位置
74. 搜索二维矩阵
81. 搜索旋转排序数组 II
动态规划
题目
5. 最长回文子串
53. 最大子数组和
32. 最长有效括号
42. 接雨水
44. 通配符匹配
62. 不同路径
63. 不同路径 II
64. 最小路径和
70. 爬楼梯
72. 编辑距离
87. 扰乱字符串
91. 解码方法
96. 不同的二叉搜索树
97. 交错字符串
双指针
题目
11. 盛最多水的容器
15. 三数之和
16. 最接近的三数之和
18. 四数之和
26. 删除有序数组中的重复项
27. 移除元素
75. 颜色分类
80. 删除有序数组中的重复项 II
贪心法则
题目
55. 跳跃游戏
12. 整数转罗马数字
自动机
题目
8. 字符串转换整数 (atoi)
65. 有效数字
回溯
题目
17. 电话号码的字母组合
22. 括号生成
37. 解数独
47. 全排列 II
39. 组合总和
40. 组合总和 II
46. 全排列
93. 复原 IP 地址
95. 不同的二叉搜索树 II
51. N 皇后
52. N 皇后 II
79. 单词搜索
递归
题目
21. 合并两个有序链表
94. 二叉树的中序遍历
98. 验证二叉搜索树
24. 两两交换链表中的节点
38. 外观数列
50. Pow(x, n)
77. 组合
深度优先
题目
60. 排列序列
100. 相同的树
模拟
题目
XXXXXX
6. N 字形变换
二维矩阵
按规则填写矩阵,重点在计算,不涉及太多矩阵知识
7. 整数反转
取模运算
思路转换,活用取模运算
我们的程序在每个时刻有一个状态 s,每次从序列中输入一个字符 c,并根据字符 c 转移到下一个状态 s'。这样,我们只需要建立一个覆盖所有情况的从 s 与 c 映射到 s' 的表格即可解决题目中的问题
9. 回文数
数字反转
数字本身反转,然后将反转后的数字与原始数字进行比较,如果它们是相同的,那么这个数字就是回文。
10. 正则表达式匹配
正则表达式
14. 最长公共前缀
横向扫描
19. 删除链表的倒数第 N 个结点
哑节点+计算链表长度
哑节点(dummy node),它的 nextnext 指针指向链表的头节点。这样一来,我们就不需要对头节点进行特殊的判断
20. 有效的括号
栈
判断括号的有效性可以使用「栈」这一数据结构来解决 可以作为一个公式来记忆
23. 合并K个升序链表
分治法
25. K 个一组翻转链表
链表
目标非常清晰易懂,不涉及复杂的算法,需要熟悉链表的特性和操作
28. 找出字符串中第一个匹配项的下标
字符串匹配算法解决
常见的字符串匹配算法包括:
暴力匹配、
Knuth-Morris-Pratt
Knuth-Morris-Pratt 算法、
Boyer-Moore
Boyer-Moore 算法、
Sunday
Sunday 算法等
31. 下一个排列
两遍扫描+数组元素替换和反转
不涉及复杂的数据结构,核心在于能归纳出一般规则,找到切入点
43. 字符串相乘
模拟「竖式乘法」
45. 跳跃游戏 II
反向查找出发位置
48. 旋转图像
矩阵操作 自外向内顺时针循环
49. 字母异位词分组
排序 哈希表
54. 螺旋矩阵
模拟 按层模拟
56. 合并区间
排序
57. 插入区间
模拟
58. 最后一个单词的长度
反向遍历
59. 螺旋矩阵 II
模拟
61. 旋转链表
闭合为环 模拟环
66. 加一
转换思路,找出最长的后缀9
67. 二进制求和
模拟 或者 位运算
68. 文本左右对齐
模拟 或者 平均分布额外空格
69. x 的平方根
袖珍计算器算法
袖珍计算器算法」是一种用指数函数 expexp 和对数函数 lnln 代替平方根函数的方法
71. 简化路径
栈
把当前目录压入栈中,遇到..
弹出栈顶,最后返回栈中元素