仓库介绍
leetcode题解,记录自己的leetcode解题之路。
本仓库目前分为五个部分:
- 第一个部分是leetcode经典题目的解析,包括思路,关键点和具体的代码实现.
- 第二部分是对于数据结构与算法的总结
- 第三部分是anki卡片,将leetcode题目按照一定的方式记录在anki中,方便大家记忆.
- 第四部分是每日一题,每日一题是在交流群(包括微信和QQ)里进行的一种活动,大家一起解一道题,这样讨论问题更加集中,会得到更多的反馈。而且这些题目可以被记录下来,日后会进行筛选添加到仓库的题解模块.
- 第五部分是计划,这里会记录将来要加入到以上三个部分内容
🍖仓库食用指南
- 这里有一张互联网公司面试中经常考察的问题类型总结的思维导图,我们可以结合图片中的信息分析一下.
(图片来自LeetCode)
其中算法,主要是以下几种:
- 基础技巧:分治、二分、贪心
- 排序算法:快速排序、归并排序、计数排序
- 搜索算法:回溯、递归、深度优先遍历,广度优先遍历,二叉搜索树等
- 图论:最短路径、最小生成树
- 动态规划:背包问题、最长子序列
数据结构,主要有如下几种:
- 数组与链表:单/双向链表
- 栈与队列
- 哈希表
- 堆:最大堆/最小堆
- 树与图:最近公共祖先、并查集
- 字符串:前缀树(字典树)/后缀树
数据结构与算法的总结
- 动态规划(重置版)
- 二叉树的遍历
- 回溯
- 哈夫曼编码和游程编码
- 布隆过滤器🖊
- 前缀树🖊
- 《日程安排》专题
- 《构造二叉树》专题
- 滑动窗口(思路 + 模板)
- 位运算
- 小岛问题🖊
- 最大公约数
- 并查集
- 平衡二叉树专题
- 蓄水池抽样
- 单调栈
精选题解
- 字典序列删除
- 一次搞定前缀和
- 字节跳动的算法面试题是什么难度?
- 字节跳动的算法面试题是什么难度?(第二弹)
- 《我是你的妈妈呀》 – 第一期
- 一文带你看懂二叉树的序列化
- 穿上衣服我就不认识你了?来聊聊最长上升子序列
- 你的衣服我扒了 – 《最长公共子序列》
- 一文看懂《最大子序列和问题》
💻插件
或许是一个可以改变你刷题效率的浏览器扩展插件.
不能访问谷歌商店的朋友可以去我的公众号回复插件获取离线版.强烈推荐大家使用谷歌商店安装,这样如果有更新可以自动安装,毕竟咱们的插件更新还是蛮快的.
❗怎么刷LeetCode?
LEETCODE经典题目的解析(200多道)
这里仅列举具有代表性题目,并不是全部题目
目前更新了200多道题解,加上专题涉及的题目,差不多有300道那就是。
简单难度题目合集
这里的题目难度比较小,大多是模拟题,或者是很容易看出解法的题目,另外简单题目一般使用暴力法都是可以解决的.这个时候只有看一下数据范围,思考下你的算法复杂度就行了.
当然也不排除很多Hard题目也可以暴力模拟,大家平时多注意数据范围即可。
以下是我列举的经典题目(带91字样的表示出自91天学算法(活动):
- 面试题 17.12. BiNode👍
- 0001. 两数之和
- 0020. 有效的括号
- 0021. 合并两个有序链表
- 0026. 删除排序数组中的重复项
- 0053. 最大子序和
- 0066. 加一91
- 0088. 合并两个有序数组
- 0101. 对称二叉树
- 0104. 二叉树的最大深度
- 0108. 将有序数组转换为二叉搜索树
- 0121. 买卖股票的最佳时机
- 0122. 买卖股票的最佳时机 II
- 0125. 验证回文串
- 0136. 只出现一次的数字
- 0155. 最小栈👍
- 0160. 相交链表91
- 0167. 两数之和 II 输入有序数组
- 0169. 多数元素
- 0172. 阶乘后的零
- 0190. 颠倒二进制位
- 0191. 位 1 的个数
- 0198. 打家劫舍
- 0203. 移除链表元素
- 0206. 反转链表
- 0219. 存在重复元素 II
- 0226. 翻转二叉树
- 0232. 用栈实现队列👍91
- 0263. 丑数
- 0283. 移动零
- 0342. 4 的幂👍
- 0349. 两个数组的交集
- 0371. 两整数之和
- 401. 二进制手表
- 0437. 路径总和 III
- 0455. 分发饼干
- 0504. 七进制数
- 0575. 分糖果
- 0665. 非递减数列
- 821. 字符的最短距离91
- 0874. 模拟行走机器人
- 1128. 等价多米诺骨牌对的数量
- 1260. 二维网格迁移
- 1332. 删除回文子序列
中等难度题目合集
中等题目是力扣比例最大的部分,因此这部分我的题解也是最多的.大家不要太过追求难题,先把中等难度题目做熟了再说.
这部分的题目要不需要我们挖掘题目的内含信息,将其抽象成简单题目.要么是一些写起来比较麻烦的题目,一些人编码能力不行就挂了.因此大家一定要自己做,即使看了题解“会了”,也要自己码一遍.自己不亲自写一遍,里面的细节永远不知道.
以下是我列举的经典题目(带91字样的表示出自91天学算法(活动):
- 面试题 17.09. 第 k 个数
- 面试题 17.23. 最大黑方阵
- 面试题 16.16. 部分排序
- Increasing Digits👍
- Longest Contiguously Strictly Increasing Sublist After Deletion👍
- Consecutive Wins
- Sort-String-by-Flipping
- Number of Substrings with Single Character Difference
- Bus Fare👍
- Minimum Dropping Path Sum
- Longest-Matrix-Path-Length
- 0002. 两数相加
- 0003. 无重复字符的最长子串
- 0005. 最长回文子串
- 0011. 盛最多水的容器
- 0015. 三数之和
- 0017. 电话号码的字母组合
- 0019. 删除链表的倒数第 N 个节点
- 0022. 括号生成
- 0024. 两两交换链表中的节点
- 0029. 两数相除
- 0031. 下一个排列
- 0033. 搜索旋转排序数组
- 0039. 组合总和
- 0040. 组合总和 II
- 0046. 全排列
- 0047. 全排列 II
- 0048. 旋转图像
- 0049. 字母异位词分组
- 0050. Pow(x, n)👍
- 0055. 跳跃游戏
- 0056. 合并区间
- 0060. 第 k 个排列👍
- 0061. 旋转链表91
- 0062. 不同路径
- 0073. 矩阵置零
- 0075. 颜色分类👍
- 0078. 子集
- 0079. 单词搜索
- 0080. 删除排序数组中的重复项 II
- 0086. 分隔链表
- 0090. 子集 II
- 0091. 解码方法
- 0092. 反转链表 II
- 0094. 二叉树的中序遍历👍
- 0095. 不同的二叉搜索树 II
- 0096. 不同的二叉搜索树
- 0098. 验证二叉搜索树
- 0102. 二叉树的层序遍历
- 0103. 二叉树的锯齿形层次遍历
- 0113. 路径总和 II
- 0129. 求根到叶子节点数字之和👍
- 0130. 被围绕的区域
- 0131. 分割回文串
- 0139. 单词拆分
- 0144. 二叉树的前序遍历
- 0147. 对链表进行插入排序
- 0150. 逆波兰表达式求值
- 0152. 乘积最大子数组
- 0153. 寻找旋转排序数组中的最小值
- 0199. 二叉树的右视图👍
- 0200. 岛屿数量👍
- 0201. 数字范围按位与
- 0208. 实现 Trie (前缀树)
- 0209. 长度最小的子数组
- 0211. 添加与搜索单词 – 数据结构设计
- 0215. 数组中的第 K 个最大元素
- 0220. 存在重复元素 III
- 0221. 最大正方形
- 0227. 基本计算器 II
- 0229. 求众数 II
- 0230. 二叉搜索树中第 K 小的元素
- 0236. 二叉树的最近公共祖先
- 0238. 除自身以外数组的乘积
- 0240. 搜索二维矩阵 II
- 0279. 完全平方数
- 0309. 最佳买卖股票时机含冷冻期
- 0322. 零钱兑换👍
- 0328. 奇偶链表
- 0331. 验证二叉树的前序序列化
- 0334. 递增的三元子序列
- 0337. 打家劫舍 III
- 0343. 整数拆分
- 0365. 水壶问题
- 0378. 有序矩阵中第 K 小的元素
- 0380. 常数时间插入、删除和获取随机元素
- 0385. 迷你语法分析器
- 0394. 字符串解码91
- 0416. 分割等和子集
- 0424. 替换后的最长重复字符
- 0438. 找到字符串中所有字母异位词
- 0445. 两数相加 II
- 0454. 四数相加 II
- 0456. 132 模式
- 0464. 我能赢么
- 0473. 火柴拼正方形👍
- 0494. 目标和
- 0516. 最长回文子序列
- 0513. 找树左下角的值91
- 0518. 零钱兑换 II
- 0525. 连续数组
- 0547. 朋友圈
- 0560. 和为 K 的子数组
- 0609. 在系统中查找重复文件
- 0611. 有效三角形的个数👍
- 0673. 最长递增子序列的个数
- 0686. 重复叠加字符串匹配
- 0718. 最长重复子数组
- 0714. 买卖股票的最佳时机含手续费
- 0735. 行星碰撞
- 0754. 到达终点数字
- 0785. 判断二分图
- 0790. 多米诺和托米诺平铺
- 0799. 香槟塔
- 0801. 使序列递增的最小交换次数
- 0816. 模糊坐标
- 0820. 单词的压缩编码
- 0873. 最长的斐波那契子序列的长度
- 0875. 爱吃香蕉的珂珂
- 0877. 石子游戏
- 0886. 可能的二分法
- 0898. 子数组按位或操作
- 0900. RLE 迭代器
- 0911. 在线选举
- 0912. 排序数组
- 0932. 漂亮数组
- 0935. 骑士拨号器
- 0947. 移除最多的同行或同列石头
- 0959. 由斜杠划分区域
- 0978. 最长湍流子数组
- 0987. 二叉树的垂序遍历91
- 1004. 最大连续 1 的个数 III
- 1011. 在 D 天内送达包裹的能力
- 1014. 最佳观光组合
- 1015. 可被 K 整除的最小整数
- 1019. 链表中的下一个更大节点
- 1020. 飞地的数量
- 1023. 驼峰式匹配
- 1031. 两个非重叠子数组的最大和
- 1043. 分隔数组以得到最大和
- 1104. 二叉树寻路
- 1129. 颜色交替的最短路径
- 1131.绝对值表达式的最大值
- 1186. 删除一次得到子数组最大和
- 1218. 最长定差子序列
- 1227. 飞机座位分配概率👍
- 1261. 在受污染的二叉树中查找元素
- 1262. 可被三整除的最大和
- 1297. 子串的最大出现次数
- 1310. 子数组异或查询
- 1334. 阈值距离内邻居最少的城市
- 1371.每个元音包含偶数次的最长子字符串
- 1381. 设计一个支持增量操作的栈91
- 1423. 可获得的最大点数
- 1438. 绝对差不超过限制的最长连续子数组
- 1558. 得到目标数组的最少函数调用次数
- 1574. 删除最短的子数组使剩余数组有序
- 1589. 所有排列中的最大和
- 1631. 最小体力消耗路径
- 1658. 将 x 减到 0 的最小操作数
- 1697. 检查边长度限制的路径是否存在
- 1737. 满足三条件之一需改变的最少字符数
- 1834. 单线程 CPU
- 1899. 合并若干三元组以形成目标三元组👍
- 1904. 你完成的完整对局数
- 1906. 查询差绝对值的最小值
困难难度题目合集
困难难度题目从类型上说多是:
- 图
- 设计题
- 游戏场景题目
- 中等题目的跟进
从解法上来说,多是:
- 图算法
- 动态规划
- 二分法
- DFS和BFS
- 状态压缩
- 剪枝
从逻辑上说,要么就是非常难想到,要么就是非常难写代码.这里我总结了几个技巧:
- 看题目的数据范围,看能否暴力模拟
- 暴力枚举所有可能的算法往上套,比如图的题目.
- 总结和记忆解题模板,减少解题压力
以下是我列举的经典题目(带91字样的表示出自91天学算法(活动):
- LCP 20. 快速公交
- LCP 21. 追逐游戏👍
- Number Stream to Intervals
- Triple Inversion91
- Kth Pair Distance91
- Minimum Light Radius91
- Largest Equivalent Set of Pairs👍
- Ticket-Order.md
- Connected-Road-to-Destination
- 0004. 寻找两个正序数组的中位数👍
- 0023. 合并 K 个升序链表
- 0025. K 个一组翻转链表👍
- 0030. 串联所有单词的子串
- 0032. 最长有效括号
- 0042. 接雨水
- 0052. N 皇后 II
- 0057. 插入区间
- 0065. 有效数字
- 0084. 柱状图中最大的矩形
- 0085. 最大矩形
- 0087. 扰乱字符串
- 0124. 二叉树中的最大路径和
- 0128. 最长连续序列
- 0132. 分割回文串 II👍
- 0140. 单词拆分 II
- 0145. 二叉树的后序遍历
- 0146. LRU 缓存机制
- 0154. 寻找旋转排序数组中的最小值 II
- 0212. 单词搜索 II
- 0239. 滑动窗口最大值👍
- 0295. 数据流的中位数
- 0297. 二叉树的序列化与反序列化91
- 0301. 删除无效的括号
- 0312. 戳气球
- 330. 按要求补齐数组
- 0335. 路径交叉
- 0460. LFU 缓存
- 0472. 连接词
- 0480. 滑动窗口中位数
- 0483. 最小好进制
- 0488. 祖玛游戏
- 0493. 翻转对
- 0664. 奇怪的打印机
- 0679. 24 点游戏
- 0715. Range 模块👍
- 0726. 原子的数量
- 0768. 最多能完成排序的块 II91
- 0805. 数组的均值分割
- 0839. 相似字符串组
- 0887. 鸡蛋掉落
- 0895. 最大频率栈
- 0909. 蛇梯棋
- 0975. 奇偶跳
- 0995. K 连续位的最小翻转次数
- 1032. 字符流
- 1168. 水资源分配优化
- 1178. 猜字谜
- 1203. 项目管理
- 1255. 得分最高的单词集合
- 1345. 跳跃游戏 IV
- 1449. 数位成本和为目标值的最大数字
- 1494. 并行课程 II
- 1521. 找到最接近目标值的函数值
- 1526. 形成目标数组的子数组最少增加次数
- 1649. 通过指令创建有序数组
- 1671. 得到山形数组的最少删除次数
- 1707. 与数组中元素的最大异或值
- 1713. 得到子序列的最少操作次数
- 1723. 完成所有工作的最短时间
- 1787. 使所有区间的异或结果为零
- 1835. 所有数对按位与结果的异或和
- 1871. 跳跃游戏 VII👍
- 1872. 石子游戏 VIII
- 1883. 准时抵达会议现场的最小跳过休息次数
🔱*Anki卡片
我是Anki主要分为两个部分:一部分是关键点到题目的映射,另一部分是题目到思路,关键点,代码的映射。
全部卡片都在anki-card
使用方法:
Anki-文件-导入-下拉格式选择“打包的anki集合”,然后选中你下载好的文件,确定即可.
更多关于Anki使用方法的请查看anki 官网
(目前已更新卡片一览(仅列举正面):
- 二分法解决问题的关键点是什么,相关问题有哪些?
- 如何用栈的特点来简化操作,涉及到的题目有哪些?
- 双指针问题的思路以及相关题目有哪些?
- 滑动窗口问题的思路以及相关题目有哪些?
- 回溯法解题的思路以及相关题目有哪些?
- 数论解决问题的关键点是什么,相关问题有哪些?
- 位运算解决问题的关键点是什么,相关问题有哪些?
已加入的题目有:#2#3#11
📈大事件
- 2019-07-10:纪念项目 Star 突破 1W 的一个短文,记录了项目的“兴起”之路,大家有兴趣可以看一下,如果对这个项目感兴趣,请点击一下之星,项目会持续更新、感谢大家的支持.
- 2019-10-08:纪念 LeetCode 项目 Star 突破 2W,并且github搜索“leetcode”,排名第一.
- 2020-04-12:项目突破三万 Star那就是。
- 2020-04-14:官网
力扣加加
上线啦💐💐💐💐💐,有专题讲解,每日一题,下载区和视频题解,后续会增加更多内容,还不赶紧收藏起来?地址:http://leetcode-solution.cn/
- 2021-02-23:STAR破四万
💝贡献
- 如果有想法和创意,请提issue或者进群提
- 如果想贡献增加题解或者翻译,可以参考贡献指南
关于如何提交题解,我写了一份指南
- 如果需要修改项目中图片这里存放了项目中绘制图的源代码,大家可以用draw.io打开进行编辑.
💌鸣谢
感谢为这个项目作出贡献的所有小伙伴