学习算法和数据结构的项目, 提供java, go, c, c++和python版, 记录了leetcode上常见的的题目和相关解答, 尽量提供详尽的注释进行解答. HOT100最好全部做一遍, 出现在周赛里的会特别标出, 其他按星级排名, 星越多越重要.
常见的练习题, 包括贪心算法, 双指针, 二分查找, 排序, 优先搜索, 动态规划, 分治法, 数学, 位运算.
- 双指针: 基本双指针, 快慢指针, 滑动窗口
- 优先搜索: 深度优先, 回溯, 广度优先
- 排序:
- 比较排序: 冒泡排序, 插入排序, 选择排序, 希尔排序, 快速排序, 堆排序, 归并排序
- 非比较排序: 计数排序, 桶排序, 基数排序
- 动态规划: 一维, 二维, 分割类型题, 子序列问题, 背包问题, 字符串编辑, 股票交易
- 数学: 公倍数与公因数, 质数, 数字处理, 随机与采样
核心思想: 每次操作都是局部最优的,从而使最后得到的结果是全局最优的。
题号 | 题目名称 | 代码 | 难度 | 级别 |
---|---|---|---|---|
11 | 盛最多水的容器 | Java | 中等 | HOT100 |
55 | 跳跃游戏 | Java | 中等 | HOT100 |
406 | 根据身高重建队列 | Java | 中等 | HOT100 |
581 | 最短无序连续子数组 | Java | 中等 | HOT100 |
621 | 任务调度器 | Java | 中等 | HOT100 |
921 | 使括号有效的最少添加 | Go C | 中等 | ⭐️ |
2086 | 从房屋收集雨水需要的最少水桶数 | Java | 中等 | 第 66 场双周赛 |
2087 | 从数组中移除最大网格图中机器人回家的最小代价值和最小值 | Java | 中等 | 第 66 场双周赛 |
2091 | 从数组中移除最大值和最小值 | Java | 中等 | 第 269 场周赛 |
题号 | 题目名称 | 代码 | 难度 | 级别 |
---|
题号 | 题目名称 | 代码 | 难度 | 级别 |
---|
题号 | 题目名称 | 代码 | 难度 | 级别 |
---|---|---|---|---|
2090 | 半径为 k 的子数组平均值 | Java | 中等 | 第269场周赛 |
二分查找也常被称为二分法或者折半查找,每次查找时通过将待查找区间分成两部分并只取一部分继续查找,将查找的复杂度大大减少。对于一个长度为 O(n)的数组,二分查找的时间复杂度为 O(log n)。
题号 | 题目名称 | 代码 | 难度 | 级别 |
---|---|---|---|---|
4 | 寻找两个正序数组的中位数 | Java | 困难 | HOT100 |
33 | 搜索旋转排序数组 | Java | 中等 | HOT100 |
34 | 在排序数组中查找元素的第一个和最后一个位置 | Java | 中等 | HOT100 |
240 | 搜索二维矩阵II | Java | 中等 | HOT100 |
287 | 寻找重复数 | Java | 中等 | HOT100 |
300 | 最长递增子序列 | Java | 中等 | HOT100 |
常见的练习题, 包括数组, 字符串, 栈, 队列, 哈希表, 多重集合与映射, 前缀和与积分图, 链表, 树, 图, 复杂数据结构.
- 栈: 基本栈, 单调栈
- 队列: 优先队列, 双端队列
- 树: 二叉树, 二叉搜索树, 字典树
- 复杂数据结构: LRU, 并查集
题号 | 题目名称 | 代码 | 难度 | 级别 |
---|---|---|---|---|
2089 | 找出数组排序后的目标下标 | Java | 中等 | 第269场周赛 |
题号 | 题目名称 | 代码 | 难度 | 级别 |
---|---|---|---|---|
设计通用版优先队列 | Java Go C | 困难 | ⭐️⭐️⭐️⭐️ | |
23 | 合并K个升序链表 | Java Go C | 困难 | ⭐️⭐️⭐️⭐️ |
题号 | 题目名称 | 代码 | 难度 | 级别 |
---|---|---|---|---|
4 | 用C语言实现malloc和free函数 | C | 困难 | ⭐️⭐️⭐️⭐️ |
707 | 设计链表 | Go C | 中等 | ⭐️⭐️⭐️ |
题号 | 题目名称 | 代码 | 难度 | 级别 |
---|---|---|---|---|
5 | 用go实现一个并发的map | Go | 困难 | ⭐️⭐️⭐️⭐️ |
817 | 链表组件 | Go C | 中等 | ⭐️ |
重点是迪杰斯特拉算法
题号 | 题目名称 | 代码 | 难度 | 级别 |
---|---|---|---|---|
1514 | 概率最大的路径 | Java | 中等 | ⭐️⭐️⭐️ |
题号 | 题目名称 | 代码 | 难度 | 级别 |
---|---|---|---|---|
399 | 除法求值 | Go Java | 中等 | HOT100 |
题号 | 题目名称 | 代码 | 难度 | 级别 |
---|---|---|---|---|
1206 | 设计跳表 | C Go C++ | 困难 | ⭐️⭐️⭐️⭐️ |
题号 | 题目名称 | 代码 | 难度 | 级别 |
---|---|---|---|---|
2 | 设计平衡二叉搜索树 | C Go | 困难 | ⭐️⭐️⭐️⭐️ |
3 | 设计红黑树 | C++ Go | 困难 | ⭐️⭐️⭐️⭐️ |
题号 | 题目名称 | 代码 | 难度 | 级别 |
---|---|---|---|---|
1754 | 构造字典序最大的合并字符串 | Go | 中等 | ⭐️⭐️⭐️⭐️ |
重点要掌握锁,信号量
题号 | 题目名称 | 代码 | 难度 | 级别 |
---|---|---|---|---|
1114 | 按序打印 | Java | 中等 | ⭐️⭐️⭐️ |
1115 | 交替打印FooBar | Java | 中等 | ⭐️⭐️⭐️ |
1116 | 打印零与奇偶数 | Java Go | 中等 | ⭐️⭐️⭐️ |
1117 | H2O 生成 | Java | 中等 | ⭐️⭐️⭐️ |
1195 | 交替打印字符串 | Java | 中等 | ⭐️⭐️⭐️ |
1226 | 哲学家进餐 | Java | 中等 | ⭐️⭐️⭐️ |
读写锁 | Java Go | 中等 | ⭐️⭐️⭐️ |
题号 | 题目名称 | 代码 | 难度 | 级别 |
---|---|---|---|---|
176 | 第二高的薪水 | sql | 中等 | ⭐️⭐️⭐️ |
177 | 第N高的薪水 | sql | 中等 | ⭐️⭐️⭐️ |
185 | 部门工资前三高的所有员工 | sql | 中等 | ⭐️⭐️⭐️ |
596 | 超过5名学生的课 | sql | 中等 | ⭐️⭐️⭐️ |
题号 | 题目名称 | 代码 | 难度 | 级别 |
---|---|---|---|---|
一致性hash | Java | 中等 | ⭐️⭐️⭐️ | |
分布式自增ID | Java | 中等 | ⭐️⭐️⭐️ |
题号 | 题目名称 | 代码 | 难度 | 级别 |
---|---|---|---|---|
195 | 第十行 | bash | 中等 | ⭐️⭐️⭐️ |