工作中不好刷题的话,可以把别人的代码下载下来,然后看,肯定有人刷代码的时候会把题目也放在里面的,找一找
按照类别分类来刷 刷当前题的时候,看下『题目描述』最底下有个『相似题目』,这些题的思路大致也相当 通常都是看别人的面经,然后看到有 LeetCode 题,然后来刷,比如有些 DP 的题,看完当前的题的时候,可以把当前 DP 类的简单的都刷下,毕竟简单的一般都不用怎么思考,就是学习一下思路
每个题目都先按照最容易理解,最简单的方式实现,先不用看多种解法
14-最长公共前缀
22-括号生成
43-字符串相乘
76-最小覆盖子串
151-翻转字符串里的单词
242-有效的字母异位词
344-反转字符串
394-字符串解码
438-找到字符串中所有字母异位词
844-比较含退格的字符串
1663-具有给定数值的最小字符串
[字符串匹配]
搜索一下 阮一峰 kmp (阮老师有一篇讲 kmp 的还挺好的)
大数相加\
1-两数之和
11-盛最多水的容器
15-三数之和
26-删除有序数组中的重复项
42-接雨水
49-字母异位词分组
53-最大子序和
56-合并区间
80-删除有序数组中的重复项-ii
283-移动零
349-两个数组的交集
350-两个数组的交集 2
384-打乱数组
509-斐波那契
560-和为 K 的子数组
692-前 K 个高频单词
697-数组的度
969-烧饼排序
1002-查找常用字符
215-数组中的第 K 个最大元素
1296-划分数组为连续的数字的集合
17-电话号码的字母组合 | 也叫多维数组合并成单维数组
一个已排序好的数组,找到匹配 num 的 index,需要最优解(使用二分法,但是如何写这个二分法)
连续出现的数字区间
阿拉伯数字转中文
去除数组重复项-数组中含有对象
多维数组合并
队列是先进先出,栈是先进后出
20-有效的括号
有效的括号-ii
239-滑动窗口最大值\
- valid-parentheses
- 155 min-stack
- design-circular-deque
- trapping-rain-water
通过窗口的大小不断调整来找到合适的值,或者窗口大小不变,通过左右移动来找到相应的结果
3-无重复字符的最长子串
无重复字符的最长子串和索引
76-最小覆盖子串
438-找到字符串中所有字母异位词\
非 LeetCode 题,单纯在别人面试中看到的
206-反转链表
106-相交链表
61-旋转链表
146-LRU 缓存机制
876-链表的中间节点
- swap-nodes-in-pairs
- linked-list-cycle
- linked-list-cycle-ii
- reverse-nodes-in-k-group
- 实现一个二叉树
- 二叉树二叉树的前中后序遍历
94-二叉树的中序遍历
144-二叉树的前序遍历
145-二叉树的后序遍历
958-二叉树的完全性检验
105-已知前中序,求原有的二叉树
173-二叉搜索树迭代器这题还是没太理解解法的含义
- binary-tree-inorder-traversal
- binary-tree-preorder-traversal
- n-ary-tree-postorder-traversal
- n-ary-tree-level-order-traversal
- invert-binary-tree
- validate-binary-search-tree
- maximum-depth-of-binary-tree
- minimum-depth-of-binary-tree
- serialize-and-deserialize-binary-tree
- lowest-common-ancestor-of-a-binary-tree
- construct-binary-tree-from-preorder-and-inorder-traversal
- combinations
- permutations
- permutations-ii
5-最长回文字符串
10-正则表达式匹配
42-接雨水
62-不同路径
63-不同路径 2
70-爬楼梯
70-青蛙跳台阶问题
72-编辑距离
这个的解法和 651-四键键盘的解法还是挺像的,每次都是有不同路径,然后每次都是遍历每一次的路径,然后看最优的那一个作为当前的这个
115-不同的子序列
300-最长递增子序列
322-零钱兑换
416-分割等和子集
516-最长回文子序列
651-四键键盘
887-鸡蛋掉落
1143-最长公共子序列 这个是非常典型的动态规划题
每次都选择当前这一步的最优的选择,以达到全局的最优
区间调度
55-跳跃游戏
121-买卖股票的最佳时机
122-买卖股票的最佳时机-ii
435-无重叠区间
455-分发饼干
860-柠檬水找零
1663-具有给定数值的最小字符串
- walking-robot-simulation
- jump-game
- jump-game-ii
指针也有单指针和双指针,双指针又有快慢指针和左右指针,都是针对具体场景的具体分析
1-两数之和
19-删除链表的倒数第 N 个节点
42-接雨水
80-删除排序链表中的重复元素
80-删除有序数组中的重复项-ii
121-买卖股票的最佳时机
986-区间列表的交集
[11]
[42]
[283]
[80]
[1047]
回溯主要还是要考 DFS,然后就是把在递归前的数据设置一下,递归之后设置回来,然后第三点就是在判断条件符合输出条件的时候,添加到结果集中,并 return 空。
所以要考虑的点就是,在设置进入递归的条件是什么?
22-括号生成
32-最长有效括号
39-组合总和
46-全排列
47-全排列-ii
51-N 皇后
78-子集
这个是非常经典的入门回溯的方法,先看这个来熟悉回溯
[90] []
- majority-element
- letter-combinations-of-a-phone-number
二分法求解的时候是需要注意左右边界的,参考二分查找详解
354-俄罗斯套娃信封问题
875-爱吃香蕉的珂珂
1011-在 D 天内送达包裹的能力
611-有效三角形的个数
836-矩形重叠
223-矩形面积
寻找素数
leetcode 题解法
- Dijkstra/迪杰斯特拉(计算最短路径
Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。 主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。
- 贪心算法
是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法。
- 动态规划
- 回溯
回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。
- 分治
在计算机科学中,分治法是构建基于多项分支递归的一种很重要的算法范式。字面上的解释是「分而治之」,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。 这个技巧是很多高效算法的基础,如排序算法(快速排序、归并排序)、傅立叶变换(快速傅立叶变换)。
- 指针