Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 5779906

Browse files
committed
clean code
1 parent dd5beed commit 5779906

File tree

6 files changed

+98
-48
lines changed

6 files changed

+98
-48
lines changed

‎leetcode/leetcode-09/src/main/java/Solution891.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public int sumSubseqWidths(int[] nums) {
2626
https://leetcode.cn/problems/sum-of-subsequence-widths/description/
2727
2828
一个序列的 宽度 定义为该序列中最大元素和最小元素的差值。
29-
给你一个整数数组 nums ,返回 nums 的所有非空 子序列 的 宽度之和 。由于答案可能非常大,请返回对 109 + 7 取余 后的结果。
29+
给你一个整数数组 nums ,返回 nums 的所有非空 子序列 的 宽度之和 。由于答案可能非常大,请返回对 10^9 + 7 取余 后的结果。
3030
子序列 定义为从一个数组里删除一些(或者不删除)元素,但不改变剩下元素的顺序得到的数组。例如,[3,6,2,7] 就是数组 [0,3,1,6,2,2,7] 的一个子序列。
3131
提示:
3232
1 <= nums.length <= 10^5

‎leetcode/leetcode-18/src/main/java/Solution1735.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ static long quickPow(long a, long b) {
5959
1735. 生成乘积数组的方案数
6060
https://leetcode.cn/problems/count-ways-to-make-array-with-product/description/
6161
62-
给你一个二维整数数组 queries ,其中 queries[i] = [ni, ki] 。第 i 个查询 queries[i] 要求构造长度为 ni 、每个元素都是正整数的数组,且满足所有元素的乘积为 ki ,请你找出有多少种可行的方案。由于答案可能会很大,方案数需要对 109 + 7 取余 。
62+
给你一个二维整数数组 queries ,其中 queries[i] = [ni, ki] 。第 i 个查询 queries[i] 要求构造长度为 ni 、每个元素都是正整数的数组,且满足所有元素的乘积为 ki ,请你找出有多少种可行的方案。由于答案可能会很大,方案数需要对 10^9 + 7 取余 。
6363
请你返回一个整数数组 answer,满足 answer.length == queries.length ,其中 answer[i]是第 i 个查询的结果。
6464
提示:
6565
1 <= queries.length <= 10^4

‎leetcode/leetcode-37/src/main/java/Solution3605.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,4 +182,5 @@ private int getGCD(int num1, int num2) {
182182
二分答案 + ST 表。
183183
时间复杂度 O(nlogU)
184184
二分答案 + logTrick。
185+
rating 2434 (clist.by)
185186
*/
Lines changed: 86 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,101 @@
1+
import java.util.Arrays;
2+
import java.util.Comparator;
3+
14
public class Solution3608 {
2-
public int minTime(int n, int[][] edges, int k) {
3-
int maxTime = 0;
4-
for (int[] edge : edges) {
5-
if (edge[2] > maxTime) {
6-
maxTime = edge[2];
5+
static class V1 {
6+
public int minTime(int n, int[][] edges, int k) {
7+
int maxTime = 0;
8+
for (int[] edge : edges) {
9+
if (edge[2] > maxTime) {
10+
maxTime = edge[2];
11+
}
712
}
8-
}
913

10-
int left = 0;
11-
int right = maxTime;
12-
while (left < right) {
13-
int mid = left + (right - left) / 2;
14-
// 边界二分 F, F,..., F, [T, T,..., T]
15-
// ----------------------^
16-
if (check(mid, n, edges, k)) {
17-
right = mid;
18-
} else {
19-
left = mid + 1;
14+
int left = 0;
15+
int right = maxTime;
16+
while (left < right) {
17+
int mid = left + (right - left) / 2;
18+
// 边界二分 F, F,..., F, [T, T,..., T]
19+
// ----------------------^
20+
if (check(mid, n, edges, k)) {
21+
right = mid;
22+
} else {
23+
left = mid + 1;
24+
}
2025
}
26+
return left;
2127
}
22-
return left;
23-
}
2428

25-
private boolean check(int mid, int n, int[][] edges, int k) {
26-
DSU dsu = new DSU(n);
27-
for (int[] edge : edges) {
28-
int time = edge[2];
29-
if (time > mid) {
30-
int u = edge[0], v = edge[1];
31-
dsu.union(u, v);
29+
private boolean check(int mid, int n, int[][] edges, int k) {
30+
DSU dsu = new DSU(n);
31+
for (int[] edge : edges) {
32+
int time = edge[2];
33+
if (time > mid) {
34+
int u = edge[0], v = edge[1];
35+
dsu.union(u, v);
36+
}
3237
}
38+
return dsu.sz >= k;
3339
}
34-
return dsu.sz >= k;
35-
}
3640

37-
static class DSU {
38-
int[] fa;
39-
int sz;
41+
static class DSU {
42+
int[] fa;
43+
int sz;
4044

41-
public DSU(int n) {
42-
fa = new int[n];
43-
for (int i = 0; i < n; i++) fa[i] = i;
44-
sz = n;
45+
public DSU(int n) {
46+
fa = new int[n];
47+
for (int i = 0; i < n; i++) fa[i] = i;
48+
sz = n;
49+
}
50+
51+
int find(int x) { // 查找
52+
return x == fa[x] ? fa[x] : (fa[x] = find(fa[x]));
53+
}
54+
55+
void union(int p, int q) { // 合并
56+
p = find(p);
57+
q = find(q);
58+
if (p == q) return;
59+
fa[q] = p;
60+
sz--;
61+
}
4562
}
63+
}
4664

47-
int find(int x) { // 查找
48-
return x == fa[x] ? fa[x] : (fa[x] = find(fa[x]));
65+
static class V2 {
66+
public int minTime(int n, int[][] edges, int k) {
67+
DSU dsu = new DSU(n);
68+
Arrays.sort(edges, Comparator.comparingInt(o -> -o[2]));
69+
for (int[] e : edges) {
70+
dsu.union(e[0], e[1]);
71+
if (dsu.sz < k) {
72+
return e[2];
73+
}
74+
}
75+
return 0;
4976
}
5077

51-
void union(int p, int q) { // 合并
52-
p = find(p);
53-
q = find(q);
54-
if (p == q) return;
55-
fa[q] = p;
56-
sz--;
78+
static class DSU {
79+
int[] fa;
80+
int sz;
81+
82+
public DSU(int n) {
83+
fa = new int[n];
84+
for (int i = 0; i < n; i++) fa[i] = i;
85+
sz = n;
86+
}
87+
88+
int find(int x) { // 查找
89+
return x == fa[x] ? fa[x] : (fa[x] = find(fa[x]));
90+
}
91+
92+
void union(int p, int q) { // 合并
93+
p = find(p);
94+
q = find(q);
95+
if (p == q) return;
96+
fa[q] = p;
97+
sz--;
98+
}
5799
}
58100
}
59101
}
@@ -79,4 +121,6 @@ void union(int p, int q) { // 合并
79121
不存在重复的边。
80122
81123
二分答案 + 并查集。
124+
相似题目: 3613. 最小化连通分量的最大成本
125+
https://leetcode.cn/problems/minimize-maximum-component-cost/description/
82126
*/

‎leetcode/leetcode-37/src/main/java/Solution3609.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,4 +74,5 @@ public int minMoves(int sx, int sy, int tx, int ty) {
7474
2.3 x = 2y 把 x 减半得到 y,把 x 减去 y 也得到 y,所以是一样的,可以整合到 2.2
7575
相似题目: 780. 到达终点
7676
https://leetcode.cn/problems/reaching-points/
77+
rating 2451 (clist.by)
7778
*/

‎leetcode/leetcode-37/src/test/java/Solution3608Tests.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,17 @@
22
import org.junit.jupiter.api.Test;
33

44
public class Solution3608Tests {
5-
private final Solution3608 solution3608 = new Solution3608();
5+
private final Solution3608.V1 solution3608_v1 = new Solution3608.V1();
6+
private final Solution3608.V2 solution3608_v2 = new Solution3608.V2();
67

78
@Test
89
public void example1() {
910
int n = 2;
1011
int[][] edges = UtUtils.stringToInts2("[[0,1,3]]");
1112
int k = 2;
1213
int expected = 3;
13-
Assertions.assertEquals(expected, solution3608.minTime(n, edges, k));
14+
Assertions.assertEquals(expected, solution3608_v1.minTime(n, edges, k));
15+
Assertions.assertEquals(expected, solution3608_v2.minTime(n, edges, k));
1416
}
1517

1618
@Test
@@ -19,7 +21,8 @@ public void example2() {
1921
int[][] edges = UtUtils.stringToInts2("[[0,1,2],[1,2,4]]");
2022
int k = 3;
2123
int expected = 4;
22-
Assertions.assertEquals(expected, solution3608.minTime(n, edges, k));
24+
Assertions.assertEquals(expected, solution3608_v1.minTime(n, edges, k));
25+
Assertions.assertEquals(expected, solution3608_v2.minTime(n, edges, k));
2326
}
2427

2528
@Test
@@ -28,6 +31,7 @@ public void example3() {
2831
int[][] edges = UtUtils.stringToInts2("[[0,2,5]]");
2932
int k = 2;
3033
int expected = 0;
31-
Assertions.assertEquals(expected, solution3608.minTime(n, edges, k));
34+
Assertions.assertEquals(expected, solution3608_v1.minTime(n, edges, k));
35+
Assertions.assertEquals(expected, solution3608_v2.minTime(n, edges, k));
3236
}
3337
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /