leetcode icon indicating copy to clipboard operation
leetcode copied to clipboard

🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解

LeetCode-GitHub-Doocs

open-source-organization languages LICENSE
stars forks

介绍

本项目包含 LeetCode、《剑指 Offer(第 2 版)》、《剑指 Offer(专项突击版)》、《程序员面试金典(第 6 版)》等题目的相关题解。所有题解均由多种编程语言实现,包括但不限于:Java、Python、C++、Go、TypeScript、Rust。我们正在全力更新,欢迎 Star 🌟 关注本项目,获取项目最新动态。

English Version

站点

  • GitHub Pages: https://doocs.github.io/leetcode
  • Gitee Pages: https://doocs.gitee.io/leetcode

算法全解

  • LeetCode
  • 往期竞赛合集
  • 剑指 Offer(第 2 版)
  • 剑指 Offer(专项突击版)
  • 程序员面试金典(第 6 版)

专项突破

  • JavaScript 专项练习
  • 数据库专项练习

算法提升专题

1. 基础算法

  • 在排序数组中查找元素的第一个和最后一个位置 - 二分查找
  • 准时到达的列车最小时速 - 二分查找
  • 可移除字符的最大数目 - 二分查找
  • 排序数组 - 快速排序归并排序
  • 字符串相加 - 高精度加法
  • 字符串相乘 - 高精度乘法
  • 区域和检索 - 数组不可变 - 前缀和
  • 二维区域和检索 - 矩阵不可变 - 二维前缀和
  • 区间加法 - 前缀和差分
  • 用邮票贴满网格图 - 二维前缀和二维差分
  • 无重复字符的最长子串 - 双指针哈希表
  • 乘积小于 K 的子数组 - 双指针
  • 位 1 的个数 - 位运算lowbit
  • 合并区间 - 区间合并

2. 数据结构

  • 设计链表 - 单链表指针引用数组实现
  • 下一个更大元素 I - 单调栈
  • 每日温度 - 单调栈
  • 子数组的最小值之和 - 单调栈
  • 最大宽度坡 - 单调栈
  • 最多能完成排序的块 II - 单调栈
  • 子数组范围和 - 单调栈
  • 子数组最小乘积的最大值 - 单调栈
  • 滑动窗口最大值 - 单调队列
  • 满足不等式的最大值 - 单调队列
  • 和至少为 K 的最短子数组 - 单调队列
  • 带限制的子序列和 - 动态规划单调队列优化
  • 单词规律 II - 哈希表回溯
  • 最短回文串 - 字符串哈希
  • 回文对 - 字符串哈希
  • 最长重复子串 - 字符串哈希二分查找
  • 不同的循环子字符串 - 字符串哈希

3. 搜索

  • 图像渲染- BFSDFSFlood Fill 算法连通性模型
  • 岛屿数量 - BFSFlood Fill 算法
  • 01 矩阵 - 多源 BFS
  • 地图中的最高点 - 多源 BFS
  • 进击的骑士 - BFS最短路模型
  • 二进制矩阵中的最短路径 - BFS最短路模型
  • 迷宫中离入口最近的出口 - BFS最短路模型
  • 网格中的最短路径 - BFS最短路模型
  • 打开转盘锁 - 最小步数模型双向 BFSA* 算法
  • 单词接龙 - 最小步数模型双向 BFS
  • 转化数字的最小运算数 - 最小步数模型双向 BFS
  • 滑动谜题 - BFS最小步数模型A* 算法
  • 访问所有节点的最短路径 - BFS最小步数模型A* 算法
  • 为高尔夫比赛砍树 - BFSA* 算法
  • 使网格图至少有一条有效路径的最小代价 - 双端队列 BFS
  • 到达角落需要移除障碍物的最小数目 - 双端队列 BFS
  • 迷宫 - DFS连通性模型Flood Fill 算法
  • 单词搜索 - DFS搜索顺序回溯
  • 黄金矿工 - DFS搜索顺序回溯
  • 火柴拼正方形 - DFS回溯剪枝
  • 划分为 k 个相等的子集 - DFS回溯剪枝
  • 完成所有工作的最短时间 - DFS回溯剪枝
  • 公平分发饼干 - DFS回溯剪枝
  • 矩阵中的最长递增路径 - DFS记忆化搜索
  • 网格图中递增路径的数目 - DFS记忆化搜索
  • 翻转游戏 II - DFS状态压缩记忆化搜索
  • 统计所有可行路径 - DFS记忆化搜索
  • 切披萨的方案数 - DFS记忆化搜索

4. 动态规划(DP)

  • 杨辉三角 - 线性 DP数字三角形模型
  • 最小路径和 - 线性 DP数字三角形模型
  • 摘樱桃 - 线性 DP数字三角形模型
  • 摘樱桃 II - 线性 DP数字三角形模型
  • 最长递增子序列 - 线性 DP最长上升子序列模型
  • 无重叠区间 - 线性 DP最长上升子序列模型贪心优化
  • 删列造序 III - 线性 DP最长上升子序列模型
  • 俄罗斯套娃信封问题 - 线性 DP最长上升子序列模型贪心优化
  • 堆叠长方体的最大高度 - 排序线性 DP最长上升子序列模型
  • 无矛盾的最佳球队 - 排序线性 DP最长上升子序列模型
  • 最长公共子序列 - 线性 DP最长公共子序列模型
  • 两个字符串的最小 ASCII 删除和 - 线性 DP最长公共子序列模型
  • 两个字符串的删除操作 - 线性 DP最长公共子序列模型
  • 目标和 - 0-1 背包问题
  • 分割等和子集 - 0-1 背包问题
  • 最后一块石头的重量 II - 0-1 背包问题
  • 零钱兑换 - 完全背包问题
  • 组合总和 Ⅳ - 完全背包问题
  • 从栈中取出 K 个硬币的最大面值和 - 分组背包问题
  • 数字 1 的个数 - 数位 DP记忆化搜索
  • 统计各位数字都不同的数字个数 - 数位 DP记忆化搜索状态压缩
  • 不含连续 1 的非负整数 - 数位 DP记忆化搜索
  • 旋转数字 - 数位 DP记忆化搜索
  • 最大为 N 的数字组合 - 数位 DP记忆化搜索
  • 统计特殊整数 - 数位 DP记忆化搜索

5. 高级数据结构

  • 二维网格图中探测环 - 并查集检测环
  • 除法求值 - 并查集权值维护
  • 由斜杠划分区域 - 并查集连通分量个数
  • 水位上升的泳池中游泳 - 并查集
  • 交换字符串中的元素 - 并查集
  • 打砖块 - 并查集逆向思维
  • 尽量减少恶意软件的传播 II - 并查集逆向思维
  • 检查边长度限制的路径是否存在 - 并查集离线思维
  • 保证图可完全遍历 - 双并查集
  • 区域和检索 - 数组可修改 - 树状数组线段树
  • 通过指令创建有序数组 - 树状数组线段树
  • 统计数组中好三元组数目 - 树状数组线段树
  • 最多 K 次交换相邻数位后得到的最小整数 - 树状数组
  • 二维区域和检索 - 可变 - 二维树状数组线段树
  • 计算右侧小于当前元素的个数 - 离散化树状数组线段树
  • 区间和的个数 - 离散化树状数组线段树
  • 翻转对 - 离散化树状数组分治归并线段树
  • 最长递增子序列的个数 - 离散化树状数组区间最值问题
  • 奇妙序列 - 动态开点线段树懒标记
  • Range 模块 - 动态开点线段树懒标记
  • 我的日程安排表 III - 动态开点线段树懒标记
  • 每天绘制的新区域数量 - 动态开点线段树懒标记区间染色模型
  • 由单个字符重复的最长子字符串 - 线段树动态最大子段和模型
  • 矩形面积 II - 线段树离散化扫描线

6. 图论

  • 网络延迟时间 - 最短路Dijkstra 算法Bellman Ford 算法SPFA 算法
  • 得到要求路径的最小带权子图 - 最短路Dijkstra 算法
  • 连接所有点的最小费用 - 最小生成树Prim 算法Kruskal 算法
  • 最低成本联通所有城市 - 最小生成树Kruskal 算法并查集
  • 水资源分配优化 - 最小生成树Kruskal 算法并查集
  • 找到最小生成树里的关键边和伪关键边 - 最小生成树Kruskal 算法并查集
  • 判断二分图 - 染色法判定二分图并查集

加入我们

刷编程题的最大好处就是可以锻炼解决问题的思维能力。相信我,「如何去思考」​ 本身也是一项需要不断学习和练习的技能。非常感谢前微软工程师、现蚂蚁金服技术专家 @kfstorm 贡献了本项目的所有 C# 题解

如果你对本项目感兴趣,并且希望加入我们刷题小分队,欢迎随时提交 PR。请参考如下步骤:

  1. 将本项目 fork 到你的个人 GitHub 帐户,然后 clone 到你的本地机器;
  2. 进入 leetcode 目录,切换到一个新的分支;
  3. 对项目做出一些变更,然后使用 git add、commit、push 等命令将你的本地变更提交到你的远程 GitHub 仓库;
  4. 将你的变更以 PR 的形式提交过来,项目的维护人员会在第一时间对你的变更进行 review!
  5. 你也可以参考帮助文档 https://help.github.com/cn 了解更多细节。

  how-to-contribute

Open in GitHub Codespaces

Stars 趋势

Stargazers over time

贡献者

感谢以下所有朋友对本项目的贡献!

赞助者

感谢以下个人、组织对本项目的支持和赞助!

"You help the developer community practice for interviews, and there is nothing better we could ask for." -- Alan Yessenbayev

推荐者

知名互联网科技博主 @爱可可-爱生活 微博推荐。

版权

本项目著作权归 GitHub 开源社区 Doocs 所有,商业转载请联系 @yanglbme 获得授权,非商业转载请注明出处。

联系我们

欢迎各位小伙伴们添加 @yanglbme 的个人微信(微信号:YLB0109),备注 「leetcode」。后续我们会创建算法、技术相关的交流群,大家一起交流学习,分享经验,共同进步。

许可证

知识共享 版权归属-相同方式共享 4.0 国际 公共许可证