Skip to content

Commit f0426e5

Browse files
committed
Updated tags
1 parent 6632374 commit f0426e5

File tree

8 files changed

+140
-108
lines changed

8 files changed

+140
-108
lines changed

src/main/java/g3601_3700/s3663_find_the_least_frequent_digit/Solution.java

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,25 @@
11
package g3601_3700.s3663_find_the_least_frequent_digit;
22

3-
// #Easy #Biweekly_Contest_164 #2025_08_31_Time_4_ms_(100.00%)_Space_41.21_MB_(100.00%)
4-
5-
import java.util.HashMap;
6-
import java.util.Map;
3+
// #Easy #Biweekly_Contest_164 #2025_09_06_Time_1_ms_(97.91%)_Space_41.14_MB_(60.27%)
74

85
public class Solution {
96
public int getLeastFrequentDigit(int n) {
10-
String s = String.valueOf(n);
11-
int k = s.length();
12-
Map<Integer, Integer> freq = new HashMap<>();
13-
for (int i = 0; i < k; i++) {
14-
int digit = s.charAt(i) - '0';
15-
freq.put(digit, freq.getOrDefault(digit, 0) + 1);
16-
}
17-
int minfreq = Integer.MAX_VALUE;
18-
for (Map.Entry<Integer, Integer> it : freq.entrySet()) {
19-
minfreq = Math.min(minfreq, it.getValue());
7+
int[] freq = new int[10];
8+
String numStr = String.valueOf(n);
9+
for (char c : numStr.toCharArray()) {
10+
freq[c - '0']++;
2011
}
21-
int result = 10;
22-
for (Map.Entry<Integer, Integer> it : freq.entrySet()) {
23-
if (it.getValue() == minfreq) {
24-
result = Math.min(result, it.getKey());
12+
int minFreq = Integer.MAX_VALUE;
13+
int result = -1;
14+
for (int d = 0; d <= 9; d++) {
15+
if (freq[d] == 0) {
16+
continue;
17+
}
18+
if (freq[d] < minFreq) {
19+
minFreq = freq[d];
20+
result = d;
21+
} else if (freq[d] == minFreq && d < result) {
22+
result = d;
2523
}
2624
}
2725
return result;

src/main/java/g3601_3700/s3664_two_letter_card_game/Solution.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package g3601_3700.s3664_two_letter_card_game;
22

3-
// #Medium #Biweekly_Contest_164 #2025_08_31_Time_8_ms_(99.42%)_Space_60.09_MB_(52.34%)
3+
// #Medium #Biweekly_Contest_164 #2025_09_06_Time_8_ms_(98.82%)_Space_60.21_MB_(45.56%)
44

55
public class Solution {
66
public int score(String[] cards, char x) {
Lines changed: 24 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,37 @@
11
package g3601_3700.s3665_twisted_mirror_path_count;
22

3-
// #Medium #Biweekly_Contest_164 #2025_08_31_Time_204_ms_(100.00%)_Space_86.33_MB_(100.00%)
4-
5-
import java.util.Arrays;
3+
// #Medium #Biweekly_Contest_164 #2025_09_06_Time_28_ms_(100.00%)_Space_86.70_MB_(69.78%)
64

75
public class Solution {
8-
private static final int MOD = 1000000007;
9-
106
public int uniquePaths(int[][] grid) {
7+
// 0 right, 1 down
118
int n = grid.length;
129
int m = grid[0].length;
13-
int[][][] dp = new int[n][m][2];
14-
for (int i = 0; i < n; i++) {
15-
for (int j = 0; j < m; j++) {
16-
Arrays.fill(dp[i][j], -1);
10+
int mod = 1_000_000_007;
11+
int[] dp = new int[m];
12+
dp[0] = 1;
13+
for (int j = 1; j < m; j++) {
14+
if (grid[0][j - 1] == 0) {
15+
dp[j] = dp[j - 1];
1716
}
1817
}
19-
return f(0, 0, 0, grid, n, m, dp);
20-
}
21-
22-
private int f(int i, int j, int dir, int[][] grid, int n, int m, int[][][] dp) {
23-
if (i == n - 1 && j == m - 1) {
24-
return 1;
25-
}
26-
if (i >= n || j >= m) {
27-
return 0;
28-
}
29-
if (dp[i][j][dir] != -1) {
30-
return dp[i][j][dir];
31-
}
32-
long ways = 0;
33-
if (grid[i][j] == 1) {
34-
if (dir == 0) {
35-
ways = f(i + 1, j, 1, grid, n, m, dp);
36-
} else {
37-
ways = f(i, j + 1, 0, grid, n, m, dp);
18+
for (int i = 1; i < n; i++) {
19+
int[] next = new int[m];
20+
if (grid[i - 1][0] == 0 && grid[i][0] == 0) {
21+
next[0] = dp[0];
22+
}
23+
for (int j = 1; j < m; j++) {
24+
if (grid[i][j] == 0) {
25+
next[j] = (next[j] + dp[j]) % mod;
26+
}
27+
if (grid[i][j - 1] == 0) {
28+
next[j] = (next[j] + next[j - 1]) % mod;
29+
} else {
30+
next[j] = (next[j] + dp[j - 1]) % mod;
31+
}
3832
}
39-
} else {
40-
ways += f(i + 1, j, 1, grid, n, m, dp);
41-
ways += f(i, j + 1, 0, grid, n, m, dp);
33+
dp = next;
4234
}
43-
dp[i][j][dir] = (int) ways % MOD;
44-
return dp[i][j][dir];
35+
return dp[m - 1];
4536
}
4637
}
Lines changed: 95 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,106 @@
11
package g3601_3700.s3666_minimum_operations_to_equalize_binary_string;
22

3-
// #Hard #Biweekly_Contest_164 #2025_08_31_Time_22_ms_(100.00%)_Space_45.62_MB_(100.00%)
4-
5-
import java.util.ArrayDeque;
6-
import java.util.Queue;
3+
// #Hard #Biweekly_Contest_164 #2025_09_06_Time_4_ms_(100.00%)_Space_46.11_MB_(31.99%)
74

85
public class Solution {
96
public int minOperations(String s, int k) {
10-
int zeros = s.chars().map(x -> x == '0' ? 1 : 0).sum();
11-
if ((zeros % k) == 0) {
12-
return zeros / k;
7+
int zero = 0;
8+
for (char chr : s.toCharArray()) {
9+
zero += '1' - chr;
10+
}
11+
if (zero % 2 != 0 && k % 2 == 0) {
12+
return -1;
13+
}
14+
if (zero % k == 0) {
15+
return zero / k;
1316
}
14-
int n = s.length();
15-
Queue<Integer> q = new ArrayDeque<>();
16-
q.add(zeros);
17-
int res = 1;
18-
// use bounds for optimization
19-
int[][] bounds = new int[2][2];
20-
bounds[zeros & 1][0] = bounds[zeros & 1][1] = zeros;
21-
bounds[1 - (zeros & 1)][0] = Integer.MAX_VALUE;
22-
bounds[1 - (zeros & 1)][1] = Integer.MIN_VALUE;
23-
while (!q.isEmpty()) {
24-
// find min number of zeros and max number of zeros in this round
25-
int minv = Integer.MAX_VALUE;
26-
int maxv = Integer.MIN_VALUE;
27-
for (int len = q.size(); len > 0; len--) {
28-
int h = q.poll();
29-
int t = n - h;
30-
int x = Math.min(h, k);
31-
if (t >= k - x) {
32-
int fst = h - x + (k - x);
33-
minv = Math.min(minv, fst);
34-
maxv = Math.max(maxv, fst);
35-
}
36-
x = Math.min(t, k);
37-
if (h >= k - x) {
38-
int snd = h - (k - x) + x;
39-
minv = Math.min(minv, snd);
40-
maxv = Math.max(maxv, snd);
41-
}
42-
}
43-
// possible children are sequence of equal difference 2
44-
int ind = minv & 1;
45-
int temp = minv;
46-
while (temp <= maxv) {
47-
if ((temp % k) == 0) {
48-
return res + temp / k;
49-
}
50-
if (temp < bounds[ind][0] || temp > bounds[ind][1]) {
51-
q.add(temp);
52-
temp += 2;
53-
} else {
54-
temp = bounds[ind][1] + 2;
55-
}
56-
}
57-
bounds[ind][0] = Math.min(bounds[ind][0], minv);
58-
bounds[ind][1] = Math.max(bounds[ind][1], maxv);
17+
if (k % 2 == 0) {
18+
return get(zero, s.length(), k);
19+
} else {
20+
return get1(zero, s.length(), k);
21+
}
22+
}
23+
24+
private int get(int zero, int sum, int k) {
25+
int l = zero;
26+
int r = zero;
27+
int res = 0;
28+
while (true) {
29+
if (l == 0) {
30+
return res;
31+
}
32+
int lNext;
33+
if (l >= k) {
34+
lNext = l - k;
35+
} else if (r >= k) {
36+
lNext = 0;
37+
} else {
38+
lNext = k - r;
39+
}
40+
int rNext;
41+
int a = sum - r;
42+
int b = sum - l;
43+
if (a >= k) {
44+
rNext = r + k;
45+
} else if (b >= k) {
46+
rNext = sum;
47+
} else {
48+
rNext = l + b - (k - b);
49+
}
50+
if (l == lNext && r == rNext) {
51+
break;
52+
}
53+
if (l > lNext) {
54+
l = lNext;
55+
}
56+
if (r < rNext) {
57+
r = rNext;
58+
}
5959
res++;
6060
}
6161
return -1;
6262
}
63+
64+
private int get1(int zero, int sum, int k) {
65+
int[] l = {Integer.MAX_VALUE, zero};
66+
int[] r = {Integer.MIN_VALUE, zero};
67+
int res = 0;
68+
while (true) {
69+
int idx1 = res % 2;
70+
int idx = 1 - idx1;
71+
int lNext;
72+
int offset = 1 - l[idx] % 2;
73+
if (l[idx] >= k) {
74+
lNext = l[idx] - k;
75+
} else if (r[idx] >= k) {
76+
lNext = offset;
77+
} else {
78+
lNext = k - r[idx];
79+
}
80+
int rNext;
81+
int a = sum - r[idx];
82+
int b = sum - l[idx];
83+
if (a >= k) {
84+
rNext = r[idx] + k;
85+
} else if (b >= k) {
86+
rNext = sum - offset;
87+
} else {
88+
rNext = l[idx] + b - (k - b);
89+
}
90+
if (l[idx1] == lNext && r[idx1] == rNext) {
91+
break;
92+
}
93+
if (l[idx1] > lNext) {
94+
l[idx1] = lNext;
95+
}
96+
if (r[idx1] < rNext) {
97+
r[idx1] = rNext;
98+
}
99+
res++;
100+
if (l[idx1] == 0) {
101+
return res;
102+
}
103+
}
104+
return -1;
105+
}
63106
}

src/main/java/g3601_3700/s3668_restore_finishing_order/Solution.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package g3601_3700.s3668_restore_finishing_order;
22

3-
// #Easy #Weekly_Contest_465 #2025_08_31_Time_1_ms_(100.00%)_Space_45.15_MB_(49.19%)
3+
// #Easy #Weekly_Contest_465 #2025_09_06_Time_1_ms_(100.00%)_Space_45.18_MB_(44.72%)
44

55
public class Solution {
66
public int[] recoverOrder(int[] order, int[] friends) {

src/main/java/g3601_3700/s3669_balanced_k_factor_decomposition/Solution.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package g3601_3700.s3669_balanced_k_factor_decomposition;
22

3-
// #Medium #Weekly_Contest_465 #2025_08_31_Time_13_ms_(73.81%)_Space_45.35_MB_(27.49%)
3+
// #Medium #Weekly_Contest_465 #2025_09_06_Time_13_ms_(78.36%)_Space_45.64_MB_(10.38%)
44

55
import java.util.ArrayList;
66
import java.util.Collections;

src/main/java/g3601_3700/s3670_maximum_product_of_two_integers_with_no_common_bits/Solution.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package g3601_3700.s3670_maximum_product_of_two_integers_with_no_common_bits;
22

3-
// #Medium #Weekly_Contest_465 #2025_08_31_Time_138_ms_(99.69%)_Space_64.47_MB_(29.81%)
3+
// #Medium #Weekly_Contest_465 #2025_09_06_Time_151_ms_(99.28%)_Space_64.23_MB_(47.58%)
44

55
public class Solution {
66
public long maxProduct(int[] nums) {

src/main/java/g3601_3700/s3671_sum_of_beautiful_subsequences/Solution.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package g3601_3700.s3671_sum_of_beautiful_subsequences;
22

3-
// #Hard #Weekly_Contest_465 #2025_08_31_Time_224_ms_(99.03%)_Space_56.07_MB_(89.32%)
3+
// #Hard #Weekly_Contest_465 #2025_09_06_Time_233_ms_(96.31%)_Space_62.03_MB_(69.80%)
44

55
public class Solution {
66
private static final int MOD = 1000000007;

0 commit comments

Comments
 (0)