程序锅

  • 首页
  • 分类
  • 标签
  • 归档
  • 关于

  • 搜索
基础知识 Etcd LeetCode 计算机体系结构 Kubernetes Containerd Docker 容器 云原生 Serverless 项目开发维护 ELF 深入理解程序 Tmux Vim Linux Kernel Linux numpy matplotlib 机器学习 MQTT 网络基础 Thrift RPC OS 操作系统 Clang 研途 数据结构和算法 Java 编程语言 Golang Python 个人网站搭建 Nginx 计算机通用技术 Git

LeetCode 200 道高频题【按照 Tag 分类】

发表于 2021-03-18 | 0 | 阅读次数 1619

自己整理的高频题

下面是程序锅自己对网上大佬发布的 200 道高频面试题进行分类之后的结果。这 200 道,程序锅大概花了 7 个月刷完了,并且差不多每道题都过了好几遍。

刷题方法的话,主要就是先过思路,之后再统一 AC,参考的是「陈同学在搬砖」提供的刷题方法。PS:刷题为了过面试是一回事,但其实日常写写算法/数据结构题也是不错的,可以让常见的数据结构和算法可以潜移默化的影响你,进而影响日常编码,也算是一种锻炼吧。

刷题题解的话,程序锅这块暂时没有整理,但是有分类,下面每个大类表格中,程序锅将相似题解或者思想的题目用空行隔开了。

刷题代码仓库,这个程序锅一直有在 commit,欢迎 star:https://github.com/dawnguodev/algorithm

假如你没时间刷这么多题的话,建议可以按照这份整理先做链表、树相关的题目,然后再做动态规划相关的题目,再然后做数组相关的题目,最后再做其他题目。

动态规划

  1. DP 问题汇总(https://leetcode-cn.com/circle/article/NfHhXD/)
  2. 股票买卖问题
  3. 0-1背包九讲
题目
718-最长重复子数组(最值不一定是末尾)
offer42/53-连续子数组的最大和/最大子序和(最值不一定是末尾)
152-乘积最大子数组(最值不一定是末尾)
300-最长递增子序列(最值不一定是末尾)
334-递增的三元子序列
221-最大正方形
5-最长回文子串
647-回文子串
72-编辑距离
343-剪绳子/整数拆分
91-解码方法
offer10-斐波那契数列
64-最小路径和
offer47-礼物的最大价值
62-不同路径
96-不同的二叉搜索树(树、动态规划)
95-不同的二叉搜索树 2(树、动态规划)
121-买卖股票的最佳时机(数组、动态规划)/股票的最大利润(动态规划)
122-买卖股票的最佳时机 2(贪心、数组)
198-打家劫舍(动态规划)
213-打家劫舍 2(动态规划)
337-打家劫舍 3(树、深度)
416-分割等和子集(01背包---使用一维dp数组的话:外层循环只能是遍历物品,内层循环是从大到小遍历背包容量;遍历背包的顺序是从大到小,因为倒序遍历确保是为了保证物品i只被放一次。二维dp数组的话:外层遍历物品 ,内层遍历背包容量 和 外层遍历背包容量 ,内层遍历物品都是可以的。都是从小到大。)
1049-最后一块石头的重量2(01背包---一维dp数组同上)
474-一和零(01背包---跟一维dp数组的方式类型,但是这里会有 3 层 for 循环)
494-目标和(01背包---一维dp数组同上)
518. 零钱兑换 II(完全背包,如果求组合数就是外层for循环遍历物品,内层for遍历背包(从小到大))
377. 组合总和 Ⅳ(完全背包,如果求排列数就是外层for遍历背包,内层for循环遍历物品)
offer10/70-青蛙跳台阶/爬楼梯(完全背包,排列数)
322-零钱兑换(完全背包)
279-完全平方数(完全背包)
139-单词拆分(完全背包)
(完全背包问题中,假如使用了一维dp数组,两个 for 循环嵌套的顺序是无所谓的,需要从小到大遍历)
338-比特位计数(位运算、动态规划)

贪心

题目
55-跳跃游戏
455-分发饼干(田忌赛马的味道)
406-根据身高重建队列 https://leetcode-cn.com/problems/queue-reconstruction-by-height/solution/xian-pai-xu-zai-cha-dui-dong-hua-yan-shi-suan-fa-g/,渔(套路):一般这种数对,还涉及排序的,根据第一个元素正向排序,根据第二个元素反向排序,或者根据第一个元素反向排序,根据第二个元素正向排序,往往能够简化解题过程。

回溯

题目
22-括号生成(回溯-深度遍历)
78-子集 https://leetcode-cn.com/problems/subsets/solution/hui-su-suan-fa-by-powcai-5/
90-子集 2
39-组合总和
40-组合总和 2
46-全排列
17-电话号码的字母组合(回溯算法)
79-单词搜索(深度)
200-岛屿数量(深度、广度)

数组

题目
offer04/240-二维数组中的查找/搜索二维矩阵 2(将二维数组转换为二叉搜索树)
offer29/54-顺时针打印矩阵/螺旋矩阵(数组操作)
48-旋转图像(数组操作)
118-杨辉三角(数组)
717-1比特与2比特字符(数组遍历)
66-加一(数组操作)
56-合并区间(排序再遍历)
189-旋转数组(翻转整个数组+翻转前k个元素+翻转剩下的;环状替换:就是从头开始一个一个座位往后移 k)
offer03-数组中重复的数字(计数、反复交换)
287-寻找重复数(跟“数组中重复的数字”类似,但是稍微有点区别)
448-找到所有数组中消失的数字(值对应到下标,再考察下标对应值的情况)
88-合并两个有序数组(双指针)
offer66/238-构建乘积数组/除自身以外数组的乘积(拆成两部分相乘的结果)
offer64-求1+2+…+n(递归+逻辑运算)

链表

题目
237-删除链表中的节点(基本操作)-1
203-移除链表元素(基本操作)-1
offer18-删除链表的节点(基本操作)-1
83-删除排序链表中的重复元素(基本操作)-1
offer06-从尾到头打印链表(基本操作)-1
206-反转链表(双指针、递归)-1
92-反转链表2(双指针、递归)-2
24-两两交换链表中的节点(双指针、递归)
25-K 个一组翻转链表
offer22-链表中倒数第k个节点(双指针-间隔)
61-旋转链表(双指针-间隔)
19-删除链表的倒数第 N 个节点(双指针-间隔)
Offer25/21-合并两个排序的链表/合并两个有序链表(双指针)
23-合并K个升序链表(堆)
2-两数相加(链表)
86-分隔链表(双指针)
328-奇偶链表(双指针)
143-重排链表(双指针-快慢)
234-回文链表(双指针)
141-环形链表(双指针-快慢指针)
142-环形链表 2(双指针-快慢指针,但有种相交链表的感觉)
offer52/160-两个链表的第一个公共节点/相交链表(双指针)
148-排序链表(排序、链表)
146-LRU 缓存机制(设计)

栈、队列

题目
225-用队列实现栈(两个队列,一个队列可(这个主要是因为队列两端都可操作))
232/offer09-栈实现队列/用两个栈实现队列(两个栈,一个栈不行(因为栈只能一端操作))
offer31/946-栈的压入、弹出序列(用一个栈模拟入栈和出栈过程,入栈则是按照入栈的顺序,当栈顶和出栈顺序一样则弹出)
150-逆波兰表达式求值(栈)
227-基本计算器 2(栈)
739-每日温度(栈)
402-移掉K位数字(单调栈)
offer30/155-包含min函数的栈/最小栈(两个栈,一个栈就是纯栈,一个栈的栈顶存遇到的最小值)
offer59/239-滑动窗口的最大值(队列)
394-字符串解码(栈;深度)
581-最短无序连续子数组(选择排序的思想;排序;单调栈;对数组进行分段,找出左边界和右边界)

树

题目
144-二叉树的前序遍历(递归、迭代、莫里斯)
94-二叉树的中序遍历(递归、迭代、莫里斯)
145-二叉树的后序遍历(递归、迭代、莫里斯)
offer32-从上到下打印二叉树(queue)
offer32-二叉树的层序遍历/从上到下打印二叉树 2(queue)
offer32-二叉树的锯齿形层次遍历/从上到下打印二叉树 3(queue)
114-二叉树展开为链表(莫里斯遍历、后序变体、前序的栈方式)
offer36-二叉搜索树与双向链表(中序遍历的框架)
538/1038-把二叉搜索树转换为累加树(中序变体)
199-二叉树的右视图(深度、广度)
offer34/113-路径总和 2/二叉树中和为某一值的路径(DFS-先序---遍历框架)
offer27/226-二叉树的镜像/翻转二叉树(递归、迭代---遍历框架)
offer54-二叉搜索树的第K大节点(中序遍历的逆序的框架)
230-二叉搜索树中第 K 小的元素(类似与第 K 大的元素)
109-有序链表转换二叉搜索树(递归+快慢指针、中序遍历框架)
98-验证二叉搜索树(中序遍历的结果、递归的方式)
offer33-二叉搜索树的后序遍历序列(递归、单调栈)
offer07/105-重建二叉树/从前序与中序遍历序列构造二叉树(递归方式)
654-最大二叉树(递归,类似之前的重建二叉树)
108-将有序数组转换为二叉搜索树(采用递归的方式,跟最大的二叉树类似)
109-有序链表转换二叉搜索树(递归+快慢指针、中序遍历框架)
offer68/235-二叉搜索树的最近公共祖先(递归、迭代)
236-二叉树的最近公共祖先(递归*2、存储父节点)
offer26-树的子结构(递归)
offer55/104-二叉树的深度/二叉树的最大深度(递归、层序遍历)
543-二叉树的直径(递归 + 求树的高度)
offer55/110-平衡二叉树(两种递归:自底而上,自顶而下)
offer28/101-对称的二叉树(一种递归、一种迭代)/对称二叉树
617-合并二叉树(递归)
98-验证二叉搜索树(中序遍历的结果、递归的方式)

堆

题目
313-超级丑数(堆;动态规划)
378-有序矩阵中第 K 小的元素(堆,但是这个堆的用法其实就是排序,可以和合并k个排序链表总结到一块;二分查找)
23-合并K个升序链表(堆)
347-前 K 个高频元素(堆、哈希表)

字符串

题目
409-最长回文串(哈希表)
offer05-替换空格
offer58/151-翻转单词顺序/ 翻转字符串里的单词
offer48/3-最长不含重复字符的子字符串/ 无重复字符的最长子串(哈希表、滑动窗口)
187-重复的DNA序列(哈希表)
567-字符串的排列(哈希表、滑动窗口)
offer58-左旋转字符串
20-有效的括号(栈)
125-验证回文串(双指针)
344-反转字符串(双指针)
415-字符串相加
38-外观数列
767-重构字符串(堆、贪心算法、排序)

排序

题目
offer45-把数组排成最小的数
179-最大数
581-最短无序连续子数组(选择排序的思想;排序;单调栈;对数组进行分段,找出左边界和右边界)
offer21-调整数组顺序使奇数位于偶数前面(快排思想)
offer40-最小的K个数(快排)
215-数组中的第K个最大元素(快排思想)
283-移动零(双指针-快排思想)
75-颜色分类(快排思想的双指针)

二分查找

题目
35-搜索插入位置(二分查找:https://leetcode-cn.com/problems/search-insert-position/solution/hua-jie-suan-fa-35-sou-suo-cha-ru-wei-zhi-by-guanp/)
offer53/34-在排序数组中查找数字/在排序数组中查找元素的第一个和最后一个位置(先找左边界、再找右边界)
offer53-0~n-1 中缺失的数字
287-寻找重复数(跟“数组中重复的数字”类似,但是稍微有点区别)
162-寻找峰值
33-搜索旋转排序数组
offer11/154-旋转数组的最小数字

哈希

题目
771-宝石与石头(哈希表)
575-分糖果(哈希表)
242-有效的字母异位词(排序;哈希表+字符串)
49-字母异位词分组(哈希表+字符串)
1-两数之和(哈希)
454-四数相加 II(哈希表,与两数相加那些题有点类似)
560-和为K的子数组(两层循环;先算好连加的情况,之后使用双指针遍历;与“两数之和”类似的方式)
217-存在重复元素(哈希表)
763-划分字母区间(哈希+双指针)
349-两个数组的交集(哈希)
offer50-第一个只出现一次的字符(哈希表)

位运算

题目
offer56-数组中数字出现的次数(位异或)
offer56-数组中数字出现的次数 2/只出现一次的数字 2(位运算)
136-只出现一次的数字
461-汉明距离(位运算)
offer15-二进制中1的个数(位运算)
371-两整数之和(位运算)
offer65-不用加减乘除做加法(位运算,https://leetcode-cn.com/problems/bu-yong-jia-jian-cheng-chu-zuo-jia-fa-lcof/solution/mian-shi-ti-65-bu-yong-jia-jian-cheng-chu-zuo-ji-7/)
476-数字的补数(位运算)

双指针、滑动窗口

题目
26-删除排序数组中的重复项(双指针)
16-最接近的三数之和(先排序+三指针)
15-三数之和(先排序+单层循环+双指针)
18-四数之和(先排序+两层循环+双指针)
offer57-和为s的两个数字(对撞指针)
offer57-和为s的连续正数序列(滑动窗口)
560-和为K的子数组(两层循环;先算好连加的情况,之后使用双指针遍历;与“两数之和”类似的方式)
11-盛最多水的容器(双指针)

数学

题目
7-整数反转(数学)
9-回文数(数学)
171-Excel表列序号(数学)
728-自除数(简单的循环)
326-3的幂(数学)
263-丑数(数学)
412-Fizz Buzz(纯循环)
69-x 的平方根(数学、二分查找)
offer16/50-数值的整数次方/Pow(x,n)(递归会更好理解一点;https://leetcode-cn.com/problems/powx-n/solution/50-powx-n-kuai-su-mi-qing-xi-tu-jie-by-jyd/)
258-各位相加(一种是循环;一种是找规律)
202-快乐数(判断循环问题就用双指针;哈希表)
172-阶乘后的零(这题其实就是数学找规律差不多,进行转换。小红书原题:https://leetcode-cn.com/problems/factorial-trailing-zeroes/solution/xiang-xi-tong-su-de-si-lu-fen-xi-by-windliang-3/)
292-Nim 游戏(数学找规律)
offer61-扑克牌中的顺子(找规律)
31-下一个排列(就是如何找紧接着的下一个数字)
offer39/169-数组中出现次数超过一半的数字/多数元素(摩尔投票法、排序)

其他

含题解的分类

  1. https://github.com/youngyangyang04/leetcode-master

    鹏神分享的 Github 链接

LeetCode 分类列表

  1. 花花酱 LeetCode Problem List 题目列表:https://zxi.mytechroad.com/blog/leetcode-problem-categories/

  2. cyc2018 Github 仓库:https://github.com/CyC2018/CS-Notes/blob/master/notes/Leetcode%20%E9%A2%98%E8%A7%A3%20-%20%E7%9B%AE%E5%BD%95.md

  3. Cspiration 题目列表:https://cspiration.com/leetcodeClassification

卷死我
dawnguo 微信支付

微信支付

dawnguo 支付宝

支付宝

  • 本文作者: dawnguo
  • 本文链接: /archives/184
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# 数据结构和算法 # LeetCode
数据结构与算法的知识框架【自己整理】
Linux 系统调用过程
  • 文章目录
  • 站点概览
dawnguo

dawnguo

215 日志
24 分类
37 标签
RSS
Creative Commons
© 2018 — 2025 程序锅
0%