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 06eca04

Browse files
committed
clean code
1 parent 3627e25 commit 06eca04

File tree

16 files changed

+174
-26
lines changed

16 files changed

+174
-26
lines changed

‎leetcode/leetcode-06/src/main/java/Solution516.java

Lines changed: 47 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,54 @@
1+
import java.util.Arrays;
2+
13
public class Solution516 {
2-
public int longestPalindromeSubseq(String s) {
3-
int n = s.length();
4-
if (n == 1) return 1;
5-
char[] cs = s.toCharArray();
6-
// f[i][j] 表示 [i,j] 区间最长回文子序列的长度
7-
int[][] f = new int[n][n];
8-
for (int span = 2; span <= n; span++) {
9-
for (int i = 0; i + span - 1 < n; i++) {
10-
f[i][i] = 1;
11-
int j = i + span - 1;
12-
if (cs[i] == cs[j]) {
13-
f[i][j] = f[i + 1][j - 1] + 2;
14-
} else {
15-
f[i][j] = Math.max(f[i + 1][j], f[i][j - 1]);
4+
static class V1 {
5+
public int longestPalindromeSubseq(String s) {
6+
int n = s.length();
7+
if (n == 1) return 1;
8+
char[] cs = s.toCharArray();
9+
// f[i][j] 表示 [i,j] 区间最长回文子序列的长度
10+
int[][] f = new int[n][n];
11+
for (int span = 2; span <= n; span++) {
12+
for (int i = 0; i + span - 1 < n; i++) {
13+
f[i][i] = 1;
14+
int j = i + span - 1;
15+
if (cs[i] == cs[j]) {
16+
f[i][j] = f[i + 1][j - 1] + 2;
17+
} else {
18+
f[i][j] = Math.max(f[i + 1][j], f[i][j - 1]);
19+
}
1620
}
1721
}
22+
return f[0][n - 1];
23+
}
24+
}
25+
26+
static class V2 {
27+
private char[] s;
28+
private int[][] memo;
29+
30+
public int longestPalindromeSubseq(String S) {
31+
this.s = S.toCharArray();
32+
int n = s.length;
33+
memo = new int[n][n];
34+
for (int i = 0; i < n; i++) {
35+
Arrays.fill(memo[i], -1); // -1 表示还没有计算过
36+
}
37+
return dfs(0, n - 1);
38+
}
39+
40+
private int dfs(int i, int j) {
41+
if (i > j) return 0; // 空串
42+
if (i == j) return 1; // 只有一个字母
43+
if (memo[i][j] != -1) return memo[i][j];
44+
int res;
45+
if (s[i] == s[j]) {
46+
res = dfs(i + 1, j - 1) + 2; // 都选
47+
} else {
48+
res = Math.max(dfs(i + 1, j), dfs(i, j - 1)); // 枚举哪个不选
49+
}
50+
return memo[i][j] = res;
1851
}
19-
return f[0][n - 1];
2052
}
2153
}
2254
/*

‎leetcode/leetcode-06/src/test/java/Solution516Tests.java

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

44
public class Solution516Tests {
5-
private final Solution516 solution516 = new Solution516();
5+
private final Solution516.V1 solution516_v1 = new Solution516.V1();
6+
private final Solution516.V2 solution516_v2 = new Solution516.V2();
67

78
@Test
89
public void example1() {
910
String s = "bbbab";
1011
int expected = 4;
11-
Assertions.assertEquals(expected, solution516.longestPalindromeSubseq(s));
12+
Assertions.assertEquals(expected, solution516_v1.longestPalindromeSubseq(s));
13+
Assertions.assertEquals(expected, solution516_v2.longestPalindromeSubseq(s));
1214
}
1315

1416
@Test
1517
public void example2() {
1618
String s = "cbbd";
1719
int expected = 2;
18-
Assertions.assertEquals(expected, solution516.longestPalindromeSubseq(s));
20+
Assertions.assertEquals(expected, solution516_v1.longestPalindromeSubseq(s));
21+
Assertions.assertEquals(expected, solution516_v2.longestPalindromeSubseq(s));
1922
}
2023

2124
// 补充用例
2225
@Test
2326
public void example3() {
2427
String s = "a";
2528
int expected = 1;
26-
Assertions.assertEquals(expected, solution516.longestPalindromeSubseq(s));
29+
Assertions.assertEquals(expected, solution516_v1.longestPalindromeSubseq(s));
30+
Assertions.assertEquals(expected, solution516_v2.longestPalindromeSubseq(s));
2731
}
2832
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ private double dfs(int a, int b) {
4040
4.提供 25ml 的 汤A 和 75ml 的 汤B 。
4141
当我们把汤分配给某人之后,汤就没有了。每个回合,我们将从四种概率同为 0.25 的操作中进行分配选择。如果汤的剩余量不足以完成某次操作,我们将尽可能分配。当两种类型的汤都分配完时,停止操作。
4242
注意 不存在先分配 100 ml 汤B 的操作。
43-
需要返回的值: 汤A 先分配完的概率 + 汤A和汤B 同时分配完的概率 / 2。返回值在正确答案 10-5 的范围内将被认为是正确的。
43+
需要返回的值: 汤A 先分配完的概率 + 汤A和汤B 同时分配完的概率 / 2。返回值在正确答案 10^-5 的范围内将被认为是正确的。
4444
提示:
4545
0 <= n <= 10^9
4646

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public double mincostToHireWorkers(int[] quality, int[] wage, int k) {
3939
现在我们想雇佣 k 名工人组成一个工资组。在雇佣 一组 k 名工人时,我们必须按照下述规则向他们支付工资:
4040
1.对工资组中的每名工人,应当按其工作质量与同组其他工人的工作质量的比例来支付工资。
4141
2.工资组中的每名工人至少应当得到他们的最低期望工资。
42-
给定整数 k ,返回 组成满足上述条件的付费群体所需的最小金额 。在实际答案的 10-5 以内的答案将被接受。。
42+
给定整数 k ,返回 组成满足上述条件的付费群体所需的最小金额 。在实际答案的 10^-5 以内的答案将被接受。。
4343
提示:
4444
n == quality.length == wage.length
4545
1 <= k <= n <= 10^4

‎leetcode/leetcode-16/src/main/java/Solution1515.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ private double f1(double xc, double yc) {
5353
一家快递公司希望在新城市建立新的服务中心。公司统计了该城市所有客户在二维地图上的坐标,并希望能够以此为依据为新的服务中心选址:使服务中心 到所有客户的欧几里得距离的总和最小 。
5454
给你一个数组 positions ,其中 positions[i] = [xi, yi] 表示第 i 个客户在二维地图上的位置,返回到所有客户的 欧几里得距离的最小总和 。
5555
换句话说,请你为服务中心选址,该位置的坐标 [xcentre, ycentre] 需要使下面的公式取到最小值:
56-
与真实值误差在 10-5之内的答案将被视作正确答案。
56+
与真实值误差在 10^-5之内的答案将被视作正确答案。
5757
提示:
5858
1 <= positions.length <= 50
5959
positions[i].length == 2

‎leetcode/leetcode-16/src/main/java/Solution1561.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,6 @@ public int maxCoins(int[] piles) {
3232
贪心。
3333
搞不定 Alice 就搞定 Bob。
3434
时间复杂度 O(nlogn)。
35+
相似题目: 3457. 吃披萨
36+
https://leetcode.cn/problems/eat-pizzas/description/
3537
*/

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public double maxAverageRatio(int[][] classes, int extraStudents) {
3636
给你一个二维数组 classes ,其中 classes[i] = [passi, totali] ,表示你提前知道了第 i 个班级总共有 totali 个学生,其中只有 passi 个学生可以通过考试。
3737
给你一个整数 extraStudents ,表示额外有 extraStudents 个聪明的学生,他们 一定 能通过任何班级的期末考。你需要给这 extraStudents 个学生每人都安排一个班级,使得 所有 班级的 平均 通过率 最大 。
3838
一个班级的 通过率 等于这个班级通过考试的学生人数除以这个班级的总人数。平均通过率 是所有班级的通过率之和除以班级数目。
39-
请你返回在安排这 extraStudents 个学生去对应班级后的 最大 平均通过率。与标准答案误差范围在 10-5 以内的结果都会视为正确结果。
39+
请你返回在安排这 extraStudents 个学生去对应班级后的 最大 平均通过率。与标准答案误差范围在 10^-5 以内的结果都会视为正确结果。
4040
提示:
4141
1 <= classes.length <= 10^5
4242
classes[i].length == 2

‎leetcode/leetcode-22/src/test/java/SolutionP2137Tests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
public class SolutionP2137Tests {
55
private final SolutionP2137 solutionP2137 = new SolutionP2137();
6-
// 如果你的答案和标准答案的误差不超过 10-5,那么答案将被通过。
6+
// 如果你的答案和标准答案的误差不超过 10^-5,那么答案将被通过。
77
private static final double DELTA = 1e-5;
88

99
@Test

‎leetcode/leetcode-25/src/main/java/Solution2469.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public double[] convertTemperature(double celsius) {
1111
1212
给你一个四舍五入到两位小数的非负浮点数 celsius 来表示温度,以 摄氏度(Celsius)为单位。
1313
你需要将摄氏度转换为 开氏度(Kelvin)和 华氏度(Fahrenheit),并以数组 ans = [kelvin, fahrenheit] 的形式返回结果。
14-
返回数组 ans 。与实际答案误差不超过 10-5 的会视为正确答案。
14+
返回数组 ans 。与实际答案误差不超过 10^-5 的会视为正确答案。
1515
注意:
1616
开氏度 = 摄氏度 + 273.15
1717
华氏度 = 摄氏度 * 1.80 + 32.00

‎leetcode/leetcode-35/src/main/java/Solution3472.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,6 @@ private int dfs(int i, int j, int k) {
4646
4747
区间 DP。
4848
时间复杂度 O(n^2 * k)。
49+
相似题目: 516. 最长回文子序列
50+
https://leetcode.cn/problems/longest-palindromic-subsequence/
4951
*/

0 commit comments

Comments
(0)

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