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