Skip to content

Commit 9520801

Browse files
committed
.
1 parent bf83d15 commit 9520801

File tree

52 files changed

+2206
-223
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+2206
-223
lines changed

README.md

Lines changed: 51 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@
99
1.7 **[贪心算法](#贪心算法)** <br>
1010
1.8 **[动态规划](#动态规划)** <br>
1111
1.9 **[最大流](#最大流)** <br>
12+
1.10 **[前缀和](#前缀和)** <br>
13+
1.11 **[双指针](#双指针)** <br>
1214
2. **[题目汇总](#题目汇总)** <br>
15+
3. **[力扣竞赛](#力扣竞赛)** <br>
1316

1417

1518
# **基础类型**
@@ -21,16 +24,17 @@
2124
3. **[冒泡排序](基础类型/排序/1.%20O(n^2)/1.%20冒泡排序.java)** <br>
2225
4. **[选择排序](基础类型/排序/1.%20O(n^2)/2.%20选择排序.java)** <br>
2326
5. **[插入排序](基础类型/排序/1.%20O(n^2)/3.%20插入排序.java)** <br>
24-
6. **[希尔排序](基础类型/排序/2.%20O(n%20*%20log_n)/4.%20希尔排序.java)** <br>
25-
7. **[堆排序](基础类型/排序/2.%20O(n%20*%20log_n)/5.%20堆排序.java)** <br>
26-
8. **[快速排序](基础类型/排序/2.%20O(n%20*%20log_n)/6.%20快速排序.java)** <br>
27-
9. **[归并排序](基础类型/排序/2.%20O(n%20*%20log_n)/7.%20归并排序.java)** <br>
27+
6. **[希尔排序](基础类型/排序/2.%20O(n_log_n)/4.%20希尔排序.java)** <br>
28+
7. **[堆排序](基础类型/排序/2.%20O(n_log_n)/5.%20堆排序.java)** <br>
29+
8. **[快速排序](基础类型/排序/2.%20O(n_log_n)/6.%20快速排序.java)** <br>
30+
9. **[归并排序](基础类型/排序/2.%20O(n_log_n)/7.%20归并排序.java)** <br>
2831
10. **[计数排序 (待整理)](基础类型/排序/3.%20O(n)/8.%20计数排序.java)** <br>
2932
11. **[基数排序 (待整理)](基础类型/排序/3.%20O(n)/9.%20基数排序.java)** <br>
3033
**[56. 合并区间 (利用 Comparator 自定义排序)](题目汇总/56.%20合并区间.java)** <br>
3134
**[239. 滑动窗口最大值 (单调队列、优先队列 (Comparator自定义排序)、TreeMap)](题目汇总/239.%20滑动窗口最大值.java)** <br>
3235
**[373. 查找和最小的K对数字 (堆、优先队列 (Comparator自定义排序))](题目汇总/373.%20查找和最小的K对数字.java)** <br>
3336
**[23. 合并K个升序链表 (归并排序、优先队列 (Comparable自定义排序))](题目汇总/23.%20合并K个升序链表.java)** <br>
37+
**[5864. 游戏中弱角色的数量 (数组排序)](力扣竞赛/第%20257%20场周赛/5864.%20游戏中弱角色的数量.java)** <br>
3438

3539
##
3640
**[144. 树的前序遍历](基础类型/树/144.%20树的前序遍历.java)** <br>
@@ -57,6 +61,7 @@
5761

5862
## 回溯
5963
**[51. N 皇后 (回溯算法)](题目汇总/51.%20N%20皇后.java)** <br>
64+
**[37. 解数独 (回溯)](题目汇总/37.%20解数独.java)** <br>
6065
**[79. 单词搜索 (DFS、回溯)](题目汇总/79.%20单词搜索.java)** <br>
6166
**[491. 递增子序列 (回溯、枝剪)](题目汇总/491.%20递增子序列.java)** <br>
6267

@@ -66,18 +71,25 @@
6671
**[480. 滑动窗口中位数 (滑动窗口)](题目汇总/480.%20滑动窗口中位数.java)** <br>
6772

6873
## 分治
74+
**[34. 在排序数组中查找元素的第一个和最后一个位置 (二分查找)](题目汇总/34.%20在排序数组中查找元素的第一个和最后一个位置.java)** <br>
6975
**[704. 二分查找](基础类型/查找/704.%20二分查找.java)** <br>
7076
**[540. 有序数组中的单一元素 (二分查找)](题目汇总/540.%20有序数组中的单一元素.java)** <br>
7177
**[大于target的最小的数的下标](力扣训练营/毕业竞赛/3.%20第三题.java)** <br>
7278
**[441. 排列硬币 (小于等于target的最大的数)](题目汇总/441.%20排列硬币.java)** <br>
7379

7480
## 贪心算法
7581
**[452. 用最少数量的箭引爆气球 (贪心算法)](题目汇总/452.%20用最少数量的箭引爆气球.java)** <br>
82+
**[502. IPO (贪心算法、最大堆)](题目汇总/502.%20IPO.java)** <br>
83+
**[376. 摆动序列 (贪心、动态规划)](题目汇总/376.%20摆动序列.java)** <br>
84+
**[678. 有效的括号字符串 (贪心)](题目汇总/678.%20有效的括号字符串.java)** <br>
7685

7786
## 动态规划
87+
**[5. 最长回文子串 (动态规划)](题目汇总/5.%20最长回文子串.java)** <br>
88+
**[1143. 最长公共子序列 (动态规划(经典题目))](题目汇总/1143.%20最长公共子序列.java)** <br>
7889
**[279. 完全平方数 (动态规划、完全背包)](题目汇总/279.%20完全平方数.java)** <br>
7990
**[322. 零钱兑换 (完全背包、动态规划)](题目汇总/322.%20零钱兑换.java)** <br>
8091
**[518. 零钱兑换 II (动态规划,非完全背包)](题目汇总/518.%20零钱兑换%20II.java)** <br>
92+
**[97. 交错字符串 (动态规划)](题目汇总/97.%20交错字符串.java)** <br>
8193
**[416. 分割等和子集 (0-1背包问题、动态规划)](题目汇总/416.%20分割等和子集.java)** <br>
8294
**[486. 预测赢家 (动态规划、DFS、博弈论)](题目汇总/486.%20预测赢家.java)** <br>
8395
**[1027. 最长等差数列 (动态规划,二维数组、Map数组)](题目汇总/1027.%20最长等差数列.java)** <br>
@@ -87,6 +99,13 @@
8799

88100
## 最大流
89101

102+
## 前缀和
103+
**[1588. 所有奇数长度子数组的和 (前缀和)](题目汇总/1588.%20所有奇数长度子数组的和.java)** <br>
104+
**[1109. 航班预订统计 (前缀和)](题目汇总/1109.%20航班预订统计.java)** <br>
105+
106+
## 双指针
107+
**[165. 比较版本号 (双指针)](题目汇总/165.%20比较版本号.java)** <br>
108+
90109
<br>
91110

92111
# **题目汇总**
@@ -95,26 +114,30 @@
95114
2. **[两数相加 (链表)](题目汇总/2.%20两数相加.java)** <br>
96115
3. **[无重复字符的最长子串 (滑动窗口)](题目汇总/3.%20无重复字符的最长子串.java)** <br>
97116
4. **[寻找两个正序数组的中位数 (归并、二分查找)](题目汇总/4.%20寻找两个正序数组的中位数.java)** <br>
117+
5. **[最长回文子串 (动态规划)](题目汇总/5.%20最长回文子串.java)** <br>
98118
11. **[盛最多水的容器 (双指针)](题目汇总/11.%20盛最多水的容器.java)** <br>
99119
12. **[整数转罗马数字](题目汇总/12.%20整数转罗马数字.java)** <br>
100120
14. **[最长公共前缀](题目汇总/14.%20最长公共前缀.java)** <br>
101121
15. **[三数之和 (双指针)](题目汇总/15.%20三数之和.java)** <br>
102122
18. **[四数之和](题目汇总/18.%20四数之和.java)** <br>
103-
19. **[删除链表的倒数第 (快慢指针、栈)](题目汇总/19.%20删除链表的倒数第%20N%20个结点.java)** <br>
123+
19. **[删除链表的倒数第N个结点 (快慢指针、栈)](题目汇总/19.%20删除链表的倒数第%20N%20个结点.java)** <br>
104124
20. **[有效的括号 (栈)](题目汇总/20.%20有效的括号.java)** <br>
105125
21. **[合并两个有序链表 (链表的指针操作)](题目汇总/21.%20合并两个有序链表.java)** <br>
106126
23. **[合并K个升序链表 (归并排序、优先队列 (Comparable自定义排序))](题目汇总/23.%20合并K个升序链表.java)** <br>
107127
26. **[删除有序数组中的重复项 (快慢指针)](题目汇总/26.%20删除有序数组中的重复项.java)** <br>
108128
31. **[下一个排列 (某一个思想技巧)](题目汇总/31.%20下一个排列.java)** <br>
109129
33. **[搜索旋转排序数组 (二分查找)](题目汇总/33.%20搜索旋转排序数组.java)** <br>
110130
34. **[在排序数组中查找元素的第一个和最后一个位置 (二分查找)](题目汇总/34.%20在排序数组中查找元素的第一个和最后一个位置.java)** <br>
131+
36. **[有效的数独](题目汇总/36.%20有效的数独.java)** <br>
132+
37. **[解数独 (回溯)](题目汇总/37.%20解数独.java)** <br>
111133
39. **[组合总和 (递归、回溯)](题目汇总/39.%20组合总和.java)** <br>
112134
41. **[缺失的第一个正数](题目汇总/41.%20缺失的第一个正数.java)** <br>
113135
42. **[接雨水 (动态规划、单调栈、双指针)](题目汇总/42.%20接雨水.java)** <br>
114136
45. **[跳跃游戏 II (贪心 or 动态规划)](题目汇总/45.%20跳跃游戏%20II.java)** <br>
115137
46. **[全排列 (DFS + 回溯)](题目汇总/46.%20全排列.java)** <br>
116138
47. **[全排列 II (DFS + 回溯)](题目汇总/47.%20全排列%20II.java)** <br>
117139
48. **[旋转图像 (数学找规律)](题目汇总/48.%20旋转图像.java)** <br>
140+
50. **[Pow(x, n) (快速幂)](题目汇总/50.%20Pow(x,%20n).java)** <br>
118141
51. **[N 皇后 (回溯算法)](题目汇总/51.%20N%20皇后.java)** <br>
119142
53. **[最大子序和](题目汇总/53.%20最大子序和.java)** <br>
120143
56. **[合并区间 (利用 Comparator 自定义排序)](题目汇总/56.%20合并区间.java)** <br>
@@ -132,6 +155,7 @@
132155
84. **[柱状图中最大的矩形 (单调栈,哨兵思想)](题目汇总/84.%20柱状图中最大的矩形.java)** <br>
133156
93. **[复原 IP 地址 (DFS,回溯)](题目汇总/93.%20复原%20IP%20地址.java)** <br>
134157
94. **[树的中序遍历](题目汇总/94.%20树的中序遍历.java)** <br>
158+
97. **[交错字符串 (动态规划)](题目汇总/97.%20交错字符串.java)** <br>
135159
98. **[验证二叉搜索树 (一种通用递归,两种中序遍历(递归、迭代))](题目汇总/98.%20验证二叉搜索树.java)** <br>
136160
100. **[树的DFS和BFS (常用递归和层序)](题目汇总/100.%20相同的树.java)** <br>
137161
101. **[对称二叉树 ](题目汇总/101.%20对称二叉树.java)** <br>
@@ -160,6 +184,7 @@
160184
155. **[最小栈 (用类实现一个最小栈)](题目汇总/155.%20最小栈.java)** <br>
161185
160. **[相交链表 (双指针、哈希)](题目汇总/160.%20相交链表.java)** <br>
162186
162. **[寻找峰值 (二分查找变形)](题目汇总/162.%20寻找峰值.java)** <br>
187+
165. **[比较版本号 (双指针)](题目汇总/165.%20比较版本号.java)** <br>
163188
169. **[多数元素(主要元素) (候选者、排序、哈希、随机抽样)](题目汇总/169.%20多数元素.java)** <br>
164189
173. **[二叉搜索树迭代器 (中序遍历二叉搜索树,递归,迭代)](题目汇总/173.%20二叉搜索树迭代器.java)** <br>
165190
198. **[打家劫舍 (1) (动态规划) (通项公式)](题目汇总/198.%20打家劫舍.java)** <br>
@@ -193,6 +218,7 @@
193218
338. **[比特位计数 (动态规划、位运算)](题目汇总/338.%20比特位计数.java)** <br>
194219
342. **[4的幂 (位运算)](题目汇总/342.%204的幂.java)** <br>
195220
373. **[查找和最小的K对数字 (堆、优先队列 (Comparator自定义排序))](题目汇总/373.%20查找和最小的K对数字.java)** <br>
221+
376. **[摆动序列 (贪心、动态规划)](题目汇总/376.%20摆动序列.java)** <br>
196222
380. **[O(1) 时间插入、删除和获取随机元素 (O(1)时间删除数组)](题目汇总/380.%20O(1)%20时间插入、删除和获取随机元素.java)** <br>
197223
400. **[第 N 位数字 (数学)](题目汇总/400.%20第%20N%20位数字.java)** <br>
198224
404. **[左叶子之和 (树的DFS、BFS)](题目汇总/404.%20左叶子之和.java)** <br>
@@ -212,6 +238,7 @@
212238
486. **[预测赢家 (动态规划、DFS、博弈论)](题目汇总/486.%20预测赢家.java)** <br>
213239
491. **[递增子序列 (回溯、枝剪)](题目汇总/491.%20递增子序列.java)** <br>
214240
495. **[提莫攻击](题目汇总/495.%20提莫攻击.java)** <br>
241+
502. **[IPO (贪心算法、最大堆)](题目汇总/502.%20IPO.java)** <br>
215242
506. **[相对名次 (排序算法)](题目汇总/506.%20相对名次.java)** <br>
216243
518. **[零钱兑换 II (动态规划,非完全背包)](题目汇总/518.%20零钱兑换%20II.java)** <br>
217244
525. **[连续数组 (前缀和 + 哈希表)](题目汇总/525.%20连续数组.java)** <br>
@@ -227,6 +254,7 @@
227254
628. **[三个数的最大乘积](题目汇总/628.%20三个数的最大乘积.java)** <br>
228255
645. **[错误的集合](题目汇总/645.%20错误的集合.java)** <br>
229256
671. **[二叉树中第二小的节点](题目汇总/671.%20二叉树中第二小的节点.java)** <br>
257+
678. **[有效的括号字符串 (贪心)](题目汇总/678.%20有效的括号字符串.java)** <br>
230258
695. **[岛屿的最大面积 (DFS、BFS)](题目汇总/695.%20岛屿的最大面积.java)** <br>
231259
697. **[数组的度](题目汇总/697.%20数组的度.java)** <br>
232260
704. **[二分查找](题目汇总/704.%20二分查找.java)** <br>
@@ -237,11 +265,28 @@
237265
930. **[和相同的二元子数组 (哈希、滑动数组)](题目汇总/930.%20和相同的二元子数组.java)** <br>
238266
934. **[最短的桥 (DFS、BFS)](题目汇总/934.%20最短的桥.java)** <br>
239267
1027. **[最长等差数列 (动态规划,二维数组、Map数组)](题目汇总/1027.%20最长等差数列.java)** <br>
268+
1109. **[航班预订统计 (前缀和)](题目汇总/1109.%20航班预订统计.java)** <br>
240269
1143. **[最长公共子序列 (动态规划(经典题目))](题目汇总/1143.%20最长公共子序列.java)** <br>
270+
1221. **[分割平衡字符串 (二分查找)](题目汇总/1221.%20分割平衡字符串.java)** <br>
241271
1254. **[统计封闭岛屿的数目 (DFS、BFS))](题目汇总/1254.%20统计封闭岛屿的数目.java)** <br>
242272
1338. **[数组大小减半 (贪心算法)](题目汇总/1338.%20数组大小减半.java)** <br>
243273
1423. **[可获得的最大点数 (滑动窗口、DFS搜索)](题目汇总/1423.%20可获得的最大点数.java)** <br>
274+
1588. **[所有奇数长度子数组的和 (前缀和)](题目汇总/1588.%20所有奇数长度子数组的和.java)** <br>
244275
剑指 Offer 04. **[二维数组中的查找](题目汇总/剑指%20Offer%2004.%20二维数组中的查找.java)** <br>
245276
剑指 Offer 05. **[替换空格](题目汇总/剑指%20Offer%2005.%20替换空格.java)** <br>
277+
剑指 Offer 10- I. **[斐波那契数列 (动态规划)](题目汇总/剑指%20Offer%2010-%20I.%20斐波那契数列.java)** <br>
246278
剑指 Offer 39. **[数组中出现次数超过一半的数字](题目汇总/剑指%20Offer%2039.%20数组中出现次数超过一半的数字.java)** <br>
247-
面试题 02.01. **[移除重复节点](题目汇总/面试题%2002.01.%20移除重复节点.java)** <br>
279+
面试题 02.01. **[移除重复节点](题目汇总/面试题%2002.01.%20移除重复节点.java)** <br>
280+
面试题 17.14. **[最小K个数 (最大堆、快排)](题目汇总/面试题%2017.14.%20最小K个数.java)** <br>
281+
中兴笔试. **[& 运算结果为 0 的区间的个数 (动态规划)](题目汇总/中兴笔试.java)** <br>
282+
283+
# **力扣竞赛**
284+
**[力扣竞赛 (总入口)](力扣竞赛)** <br>
285+
**[第 257 场周赛](力扣竞赛/第%20257%20场周赛)** <br>
286+
5863. **[统计特殊四元组](力扣竞赛/第%20257%20场周赛/5863.%20统计特殊四元组.java)** <br>
287+
5864. **[游戏中弱角色的数量 (数组排序)](力扣竞赛/第%20257%20场周赛/5864.%20游戏中弱角色的数量.java)** <br>
288+
5865. **[访问完所有房间的第一天 (动态规划)](力扣竞赛/第%20257%20场周赛/5865.%20访问完所有房间的第一天.java)** <br>
289+
**[第 60 场双周赛](力扣竞赛/第%2060%20场双周赛)** <br>
290+
5846. **[找到数组的中间位置 (前缀和)](力扣竞赛/第%2060%20场双周赛/5846.%20找到数组的中间位置.java)** <br>
291+
5847. **[找到所有的农场组 (DFS、BFS)](力扣竞赛/第%2060%20场双周赛/5847.%20找到所有的农场组.java)** <br>
292+
5848. **[树上的操作](力扣竞赛/第%2060%20场双周赛/5848.%20树上的操作.java)** <br>
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// https://leetcode-cn.com/problems/count-special-quadruplets/
2+
3+
class Solution {
4+
public int countQuadruplets(int[] nums) {
5+
int cnt = 0;
6+
7+
int len = nums.length;
8+
for(int i = 0; i < len; i++){
9+
int num1 = nums[i];
10+
for(int j = i + 1; j < len; j++){
11+
int num2 = nums[j];
12+
for(int k = j + 1; k < len; k++){
13+
int num3 = nums[k];
14+
for(int m = k + 1; m < len; m++){
15+
int num4 = nums[m];
16+
if(num1 + num2 + num3 == num4){
17+
cnt++;
18+
}
19+
}
20+
}
21+
}
22+
}
23+
24+
return cnt;
25+
}
26+
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
//https://leetcode-cn.com/problems/the-number-of-weak-characters-in-the-game/
2+
3+
/**
4+
* 此次竞赛第一名的思路
5+
* O(n * log(n))
6+
*/
7+
class Solution {
8+
public int numberOfWeakCharacters(int[][] properties) {
9+
// 优先对第一个元素降序排列,当第一个元素相等时,对第二个元素升序排列
10+
Arrays.sort(properties, (arr1, arr2) -> arr1[0] == arr2[0]? arr1[1] - arr2[1]: arr2[0] - arr1[0]);
11+
// Arrays.sort(properties, (init[] arr1, int[] arr2) -> {
12+
// return arr1[0] == arr2[0]? arr1[1] - arr2[1]: arr2[0] - arr1[0];
13+
// });
14+
15+
// for(int[] temp: properties){
16+
// System.out.println(Arrays.toString(temp));
17+
// }
18+
19+
int cnt = 0;
20+
int max = 0;
21+
for(int[] arr: properties){
22+
cnt += max > arr[1]? 1: 0; // 因为arr[0]是降序的,arr[1]是升序的。所以若之前的max大于当前的arr[1]了,则之前max对应的arr[0]一定大于当前的arr[0]
23+
max = Math.max(max, arr[1]);
24+
}
25+
return cnt;
26+
27+
}
28+
}
29+
30+
/**
31+
* 自己的超时思路
32+
* O(n^2)
33+
*/
34+
class Solution {
35+
public int numberOfWeakCharacters(int[][] properties) {
36+
// 按第一个元素排序
37+
Arrays.sort(properties, new Comparator<int[]>(){
38+
public int compare(int[] arr1, int[] arr2){
39+
return arr1[0] - arr2[0];
40+
}
41+
});
42+
43+
int cnt = 0;
44+
45+
int len = properties.length;
46+
47+
boolean[] status = new boolean[len];
48+
49+
50+
for(int i = len - 1; i >= 0; i--){
51+
int[] post = properties[i];
52+
if(status[i]){
53+
continue;
54+
}
55+
for(int j = i - 1; j >= 0; j--){
56+
if(status[j]){
57+
continue;
58+
}
59+
int[] pre = properties[j];
60+
if(post[0] > pre[0] && post[1] > pre[1]){
61+
status[j] = true;
62+
cnt++;
63+
}
64+
}
65+
}
66+
67+
return cnt;
68+
69+
}
70+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
// https://leetcode-cn.com/problems/first-day-where-you-have-been-in-all-the-rooms/
2+
3+
// 前缀和优化 DP
4+
// https://leetcode-cn.com/problems/first-day-where-you-have-been-in-all-the-rooms/solution/qian-zhui-he-you-hua-dp-by-endlesscheng-j10b/
5+
class Solution {
6+
7+
public int firstDayBeenInAllRooms(int[] nextVisit) {
8+
int[] dp = new int[nextVisit.length];
9+
int[] sum = new int[nextVisit.length];
10+
for (int i = 1; i < nextVisit.length; i++) {
11+
dp[i] = (sum[i - 1] - sum[nextVisit[i - 1]] + 1000000009) % 1000000007;
12+
sum[i] = (sum[i - 1] + dp[i]) % 1000000007;
13+
}
14+
return sum[nextVisit.length - 1];
15+
}
16+
}
17+
18+
// https://leetcode-cn.com/problems/first-day-where-you-have-been-in-all-the-rooms/solution/java-dp-by-jmss_xgp-uvpk/
19+
public int firstDayBeenInAllRooms(int[] nextVisit) {
20+
long[] dp = new long[nextVisit.length+1];
21+
int mod = 1000000007;
22+
for (int i = 0; i < nextVisit.length; i++) {
23+
24+
if (nextVisit[i] == i) {
25+
dp[i+1] = (dp[i] + 2+mod) % mod;
26+
} else {
27+
dp[i+1] = (2 * dp[i] - dp[nextVisit[i]] + 2 + mod) % mod;
28+
}
29+
}
30+
return (int)dp[dp.length-2];
31+
}
32+
33+
/**
34+
* 自己的超时思路
35+
*/
36+
class Solution {
37+
public int firstDayBeenInAllRooms(int[] nextVisit) {
38+
int len = nextVisit.length;
39+
40+
int day = 0;
41+
int room = 0;
42+
43+
Map<Integer, Integer> hashMap = new HashMap<>();
44+
45+
while(hashMap.size() != len){
46+
hashMap.put(room, hashMap.getOrDefault(room, 0) + 1);
47+
// System.out.println(day + ", " + room); // 第几天访问第几个房间
48+
if(hashMap.get(room) % 2 != 0){
49+
room = nextVisit[room];
50+
}else{
51+
room = (room + 1) % len;
52+
}
53+
day = (day + 1) % (int)(1e9 + 7);
54+
55+
}
56+
57+
return --day;
58+
59+
}
60+
}

0 commit comments

Comments
 (0)