提示:在电脑端看如下文章的,看不到文章的评论区,建议在手机端「代码随想录」公众号里也翻一下对应的文章,评论区有录友们的打卡总结,相信会和你有不少共鸣!
-
编程语言
-
求职
-
算法性能分析
-
数组
-
链表
-
哈希表
-
字符串
-
双指针法
-
栈与队列
-
二叉树
- 关于二叉树,你该了解这些!
- 二叉树:一入递归深似海,从此offer是路人
- 二叉树:听说递归能做的,栈也能做!
- 二叉树:前中后序迭代方式的写法就不能统一一下么?
- 二叉树:层序遍历登场!
- 二叉树:你真的会翻转二叉树么?
- 本周小结!(二叉树)
- 二叉树:我对称么?
- 二叉树:看看这些树的最大深度
- 二叉树:看看这些树的最小深度
- 二叉树:我有多少个节点?
- 二叉树:我平衡么?
- 二叉树:找我的所有路径?
- 还在玩耍的你,该总结啦!(本周小结之二叉树)
- 二叉树:以为使用了递归,其实还隐藏着回溯
- 二叉树:做了这么多题目了,我的左叶子之和是多少?
- 二叉树:我的左下角的值是多少?
- 二叉树:递归函数究竟什么时候需要返回值,什么时候不要返回值?
- 二叉树:构造二叉树登场!
- 二叉树:构造一棵最大的二叉树
- 本周小结!(二叉树系列三)
- 二叉树:合并两个二叉树
- 二叉树:二叉搜索树登场!
- 二叉树:我是不是一棵二叉搜索树
- 二叉树:搜索树的最小绝对差
- 二叉树:我的众数是多少?
- 二叉树:公共祖先问题
- 本周小结!(二叉树系列四)
- 二叉树:搜索树的公共祖先问题
- 二叉树:搜索树中的插入操作
- 二叉树:搜索树中的删除操作
- 二叉树:修剪一棵搜索树
- 二叉树:构造一棵搜索树
- 二叉树:搜索树转成累加树
- 二叉树:总结篇!(需要掌握的二叉树技能都在这里了)
-
回溯算法
(持续更新中....)
刷题顺序:建议先从同一类型里题目开始刷起,同一类型里再从简单到中等到困难刷起,题型顺序建议:数组-> 链表-> 哈希表->字符串->栈与队列->树。
这里我总结了各个类型的经典题目,初学者可以按照如下顺序来刷题,算法老手可以按照这个list查缺补漏!
-
数组经典题目
-
链表经典题目
-
哈希表经典题目
-
循环不变量原则
-
字符串经典题目
-
双指针法经典题目
-
栈与队列经典题目
-
二叉树经典题目
-
回溯经典题目
-
贪心经典题目
-
动态规划经典题目
-
图论经典题目
-
数论经典题目
-
高级数据结构经典题目
- 并查集
- 最小生成树
- 线段树
- 树状数组
- 字典树
-
海量数据处理
(持续补充ing)
题目 | 类型 | 难度 | 解题方法 |
---|---|---|---|
0001.两数之和 | 数组 | 简单 | 暴力 哈希 |
0015.三数之和 | 数组 | 中等 | 双指针 哈希 |
0017.电话号码的字母组合 | 回溯 | 中等 | 回溯 |
0018.四数之和 | 数组 | 中等 | 双指针 |
0019.删除链表的倒数第N个节点 | 链表 | 中等 | 双指针 |
0020.有效的括号 | 栈 | 简单 | 栈 |
0021.合并两个有序链表 | 链表 | 简单 | 模拟 |
0024.两两交换链表中的节点 | 链表 | 中等 | 模拟 |
0026.删除排序数组中的重复项 | 数组 | 简单 | 暴力 快慢指针/快慢指针 |
0027.移除元素 | 数组 | 简单 | 暴力 双指针/快慢指针/双指针 |
0028.实现strStr() | 字符串 | 简单 | KMP |
0031.下一个排列 | 数组 | 中等 | 模拟 这道题目还是有难度的 |
0035.搜索插入位置 | 数组 | 简单 | 暴力 二分 |
0037.解数独 | 回溯 | 困难 | 回溯 |
0039.组合总和 | 数组/回溯 | 中等 | 回溯 |
0040.组合总和II | 数组/回溯 | 中等 | 回溯 |
0042.接雨水 | 数组/栈/双指针 | 困难 | 双指针 单调栈 动态规划 |
0045.跳跃游戏II | 贪心 | 困难 | 贪心 |
0046.全排列 | 回溯 | 中等 | 回溯 |
0047.全排列II | 回溯 | 中等 | 回溯 |
0051.N皇后 | 回溯 | 困难 | 回溯 |
0052.N皇后II | 回溯 | 困难 | 回溯 |
0053.最大子序和 | 数组 | 简单 | 暴力 贪心 动态规划 分治 |
0055.跳跃游戏 | 数组 | 中等 | 贪心 经典题目 |
0056.合并区间 | 数组 | 中等 | 贪心 以为是模拟题,其实是贪心 |
0057.插入区间 | 数组 | 困难 | 模拟 是一道数组难题 |
0059.螺旋矩阵II | 数组 | 中等 | 模拟 |
0077.组合 | 回溯 | 中等 | 回溯 |
0078.子集 | 回溯/数组 | 中等 | 回溯 |
0083.删除排序链表中的重复元素 | 链表 | 简单 | 模拟 |
0084.柱状图中最大的矩形 | 数组 | 困难 | 单调栈 |
0090.子集II | 回溯/数组 | 中等 | 回溯 |
0093.复原IP地址 | 回溯 | 中等 | 回溯 |
0094.二叉树的中序遍历 | 树 | 中等 | 递归 迭代/栈 |
0098.验证二叉搜索树 | 树 | 中等 | 递归 |
0100.相同的树 | 树 | 简单 | 递归 |
0101.对称二叉树 | 树 | 简单 | 递归 迭代/队列/栈 和100. 相同的树 相似 |
0102.二叉树的层序遍历 | 树 | 中等 | 广度优先搜索/队列 |
0104.二叉树的最大深度 | 树 | 简单 | 递归 迭代/队列/BFS |
0105.从前序与中序遍历序列构造二叉树 | 二叉树 | 中等 | 递归 |
0106.从中序与后序遍历序列构造二叉树 | 二叉树 | 中等 | 递归 根据数组构造二叉树 |
0107.二叉树的层次遍历II | 树 | 简单 | 广度优先搜索/队列/BFS |
0108.将有序数组转换为二叉搜索树 | 二叉搜索树 | 中等 | 递归 迭代 通过递归函数返回值构造树 |
0110.平衡二叉树 | 二叉树 | 简单 | 递归 |
0111.二叉树的最小深度 | 二叉树 | 简单 | 递归 队列/BFS |
0112.路径总和 | 二叉树树 | 简单 | 深度优先搜索/递归 回溯 栈 思考递归函数什么时候需要返回值 |
0113.路径总和II | 二叉树树 | 简单 | 深度优先搜索/递归 回溯 栈 |
0116.填充每个节点的下一个右侧节点指针 | 二叉树 | 中等 | 递归 迭代/广度优先搜索 |
0117.填充每个节点的下一个右侧节点指针II | 二叉树 | 中等 | 递归 迭代/广度优先搜索 |
0122.买卖股票的最佳时机II | 贪心 | 简单 | 贪心 |
0127.单词接龙 | 广度优先搜索 | 中等 | 广度优先搜索 |
0129.求根到叶子节点数字之和 | 二叉树 | 中等 | 递归/回溯 递归里隐藏着回溯,和113.路径总和II类似 |
0131.分割回文串 | 回溯 | 中等 | 回溯 |
0141.环形链表 | 链表 | 简单 | 快慢指针/双指针 |
0142.环形链表II | 链表 | 中等 | 快慢指针/双指针 |
0143.重排链表 | 链表 | 中等 | 快慢指针/双指针 也可以用数组,双向队列模拟,考察链表综合操作的好题 |
0144.二叉树的前序遍历 | 树 | 中等 | 递归 迭代/栈 |
0145.二叉树的后序遍历 | 树 | 困难 | 递归 迭代/栈 |
0150.逆波兰表达式求值 | 栈 | 中等 | 栈 |
0151.翻转字符串里的单词 | 字符串 | 中等 | 模拟/双指针 |
0155.最小栈 | 栈 | 简单 | 栈 |
0199.二叉树的右视图 | 二叉树 | 中等 | 广度优先遍历/队列 |
0202.快乐数 | 哈希表 | 简单 | 哈希 |
0203.移除链表元素 | 链表 | 简单 | 模拟 虚拟头结点 |
0205.同构字符串 | 哈希表 | 简单 | 哈希 |
0206.翻转链表 | 链表 | 简单 | 双指针法 递归 |
0209.长度最小的子数组 | 数组 | 中等 | 暴力 滑动窗口 |
0216.组合总和III | 数组/回溯 | 中等 | 回溯算法 |
0219.存在重复元素II | 哈希表 | 简单 | 哈希 |
0222.完全二叉树的节点个数 | 树 | 简单 | 递归 |
0225.用队列实现栈 | 队列 | 简单 | 队列 |
0226.翻转二叉树 | 二叉树 | 简单 | 递归 迭代 |
0232.用栈实现队列 | 栈 | 简单 | 栈 |
0235.二叉搜索树的最近公共祖先 | 二叉搜索树 | 简单 | 递归 迭代 |
0236.二叉树的最近公共祖先 | 二叉树 | 中等 | 递归/回溯 与其说是递归,不如说是回溯 |
0237.删除链表中的节点 | 链表 | 简单 | 原链表移除 添加虚拟节点 递归 |
0239.滑动窗口最大值 | 滑动窗口/队列 | 困难 | 单调队列 |
0242.有效的字母异位词 | 哈希表 | 简单 | 哈希 |
0257.二叉树的所有路径 | 树 | 简单 | 递归/回溯 |
0316.去除重复字母 | 贪心/字符串 | 中等 | 单调栈 这道题目处理的情况比较多,属于单调栈中的难题 |
0332.重新安排行程 | 深度优先搜索/回溯 | 中等 | 深度优先搜索/回溯算法 |
0344.反转字符串 | 字符串 | 简单 | 双指针 |
0347.前K个高频元素 | 哈希/堆/优先级队列 | 中等 | 哈希/优先级队列 |
0349.两个数组的交集 | 哈希表 | 简单 | 哈希 |
0350.两个数组的交集II | 哈希表 | 简单 | 哈希 |
0383.赎金信 | 数组 | 简单 | 暴力 字典计数 哈希 |
0404.左叶子之和 | 树/二叉树 | 简单 | 递归 迭代 |
0416.分割等和子集 | 动态规划 | 中等 | 背包问题/01背包 |
0429.N叉树的层序遍历 | 树 | 简单 | 队列/广度优先搜索 |
0434.字符串中的单词数 | 字符串 | 简单 | 模拟 |
0435.无重叠区间 | 贪心 | 中等 | 贪心 经典题目,有点难 |
0450.删除二叉搜索树中的节点 | 树 | 中等 | 递归 |
0454.四数相加II | 哈希表 | 中等 | 哈希 |
0455.分发饼干 | 贪心 | 简单 | 贪心 |
0459.重复的子字符串 | 字符创 | 简单 | KMP |
0486.预测赢家 | 动态规划 | 中等 | 递归 记忆递归 动态规划 |
0491.递增子序列 | 深度优先搜索 | 中等 | 深度优先搜索/回溯算法 这个去重有意思 |
0496.下一个更大元素I | 栈 | 中等 | 单调栈 入门题目,但是两个数组还是有点绕的 |
0501.二叉搜索树中的众数 | 二叉树 | 简单 | 递归/中序遍历 |
0513.找树左下角的值 | 二叉树 | 中等 | 递归 迭代 |
0515.在每个树行中找最大值 | 二叉树 | 简单 | 广度优先搜索/队列 |
0530.二叉搜索树的最小绝对差 | 二叉树搜索树 | 简单 | 递归 迭代 |
0538.把二叉搜索树转换为累加树 | 二叉搜索树 | 简单 | 递归 迭代 |
0541.反转字符串II | 字符串 | 简单 | 模拟 |
0559.N叉树的最大深度 | N叉树 | 简单 | 递归 |
0572.另一个树的子树 | 二叉树 | 简单 | 递归 |
0575.分糖果 | 哈希表 | 简单 | 哈希 |
0589.N叉树的前序遍历 | N叉树 | 简单 | 递归 栈/迭代 |
0590.N叉树的后序遍历 | N叉树 | 简单 | 递归 栈/迭代 |
0617.合并二叉树 | 树 | 简单 | 递归 迭代 |
0637.二叉树的层平均值 | 树 | 简单 | 广度优先搜索/队列 |
0654.最大二叉树 | 树 | 中等 | 递归 |
0685.冗余连接II | 并查集/树/图 | 困难 | 并查集 |
0669.修剪二叉搜索树 | 二叉搜索树/二叉树 | 简单 | 递归 迭代 |
0700.二叉搜索树中的搜索 | 二叉搜索树 | 简单 | 递归 迭代 |
0701.二叉搜索树中的插入操作 | 二叉搜索树 | 简单 | 递归 迭代 |
0705.设计哈希集合 | 哈希表 | 简单 | 模拟 |
0707.设计链表 | 链表 | 中等 | 模拟 |
0763.划分字母区间 | 贪心 | 中等 | 双指针/贪心 体现贪心尽可能多的思想 |
0739.每日温度 | 栈 | 中等 | 单调栈 适合单调栈入门 |
0841.钥匙和房间 | 孤岛问题 | 中等 | bfs dfs |
0844.比较含退格的字符串 | 字符串 | 简单 | 栈 双指针优化 使用栈的思路但没有必要使用栈 |
0925.长按键入 | 字符串 | 简单 | 双指针/模拟 是一道模拟类型的题目 |
0941.有效的山脉数组 | 数组 | 简单 | 双指针 |
0968.监控二叉树 | 二叉树 | 困难 | 贪心 贪心与二叉树的结合 |
0973.最接近原点的K个点 | 优先级队列 | 中等 | 优先级队列 |
0977.有序数组的平方 | 数组 | 中等 | 双指针 还是比较巧妙的 |
1002.查找常用字符 | 栈 | 简单 | 栈 |
1047.删除字符串中的所有相邻重复项 | 哈希表 | 简单 | 哈希表/数组 |
1207.独一无二的出现次数 | 哈希表 | 简单 | 哈希 两层哈希 |
1356.根据数字二进制下1的数目排序 | 位运算 | 简单 | 位运算 巧妙的计算二进制中1的数量 |
1365.有多少小于当前数字的数字 | 数组、哈希表 | 简单 | 哈希 从后遍历的技巧很不错 |
1382.将二叉搜索树变平衡 | 二叉搜索树 | 中等 | 递归 迭代 98和108的组合题目 |
剑指Offer05.替换空格 | 字符串 | 简单 | 双指针 |
剑指Offer58-I.翻转单词顺序 | 字符串 | 简单 | 模拟/双指针 |
剑指Offer58-II.左旋转字符串 | 字符串 | 简单 | 反转操作 |
剑指Offer59-I.滑动窗口的最大值 | 滑动窗口/队列 | 困难 | 单调队列 |
面试题02.07.链表相交 | 链表 | 简单 | 模拟 |
持续更新中....
大家好,我是程序员Carl,哈工大师兄,ACM 校赛、黑龙江省赛、东北四省赛金牌、亚洲区域赛铜牌获得者,先后在腾讯和百度从事后端技术研发,CSDN博客专家。对算法和C++后端技术有一定的见解,利用工作之余重新刷leetcode。
加我的微信,备注:「个人简单介绍」+「组队刷题」, 拉你进刷题群,每天一道经典题目分析,而且题目不是孤立的,每一道题目之间都是有关系的,都是由浅入深一脉相承的,所以学习效果最好是每篇连续着看,也许之前你会某些知识点,但是一直没有把知识点串起来,这里每天一篇文章就会帮你把知识点串起来。
更多精彩文章持续更新,微信搜索:「代码随想录」第一时间围观,关注后回复:「简历模板」「java」「C++」「python」等关键字就可以获得我多年整理出来的学习资料。
每天8:35准时为你推送一篇经典面试题目,帮你梳理算法知识体系,轻松学习算法!,并且公众号里有大量学习资源,也有我自己的学习心得和方法总结,更有很多志同道合的好伙伴在这里打卡学习,来看看就你知道了,相信一定会有所收获!