Skip to content

Latest commit

 

History

History
257 lines (202 loc) · 11.7 KB

README.md

File metadata and controls

257 lines (202 loc) · 11.7 KB

总结

工作中不好刷题的话,可以把别人的代码下载下来,然后看,肯定有人刷代码的时候会把题目也放在里面的,找一找

如何判断程序的复杂度 参考

按照类别分类来刷 刷当前题的时候,看下『题目描述』最底下有个『相似题目』,这些题的思路大致也相当 通常都是看别人的面经,然后看到有 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 题,单纯在别人面试中看到的

组成顺子的概率
剑指 Offer61-扑克牌中的顺子\

链表

206-反转链表
106-相交链表
61-旋转链表
146-LRU 缓存机制
876-链表的中间节点

  • swap-nodes-in-pairs
  • linked-list-cycle
  • linked-list-cycle-ii
  • reverse-nodes-in-k-group

二叉树

深度/广度

动态规划

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(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。 主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。

  • 贪心算法

    是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法。

  • 动态规划
  • 回溯

    回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。

  • 分治

    在计算机科学中,分治法是构建基于多项分支递归的一种很重要的算法范式。字面上的解释是「分而治之」,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。 这个技巧是很多高效算法的基础,如排序算法(快速排序、归并排序)、傅立叶变换(快速傅立叶变换)。

  • 指针