Skip to content

Commit 653d720

Browse files
committed
Improved tags
1 parent 5c5f4e3 commit 653d720

File tree

4 files changed

+88
-82
lines changed

4 files changed

+88
-82
lines changed
Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,42 @@
11
package g3401_3500.s3446_sort_matrix_by_diagonals;
22

3-
// #Medium #2025_02_09_Time_9_ms_(100.00%)_Space_45.62_MB_(100.00%)
3+
// #Medium #Array #Sorting #Matrix #2025_02_11_Time_3_ms_(94.47%)_Space_45.46_MB_(95.07%)
44

5-
import java.util.ArrayList;
6-
import java.util.Collections;
7-
import java.util.HashMap;
8-
import java.util.List;
9-
import java.util.Map;
5+
import java.util.Arrays;
106

11-
@SuppressWarnings("java:S5413")
127
public class Solution {
13-
public int[][] sortMatrix(int[][] matrix) {
14-
Map<Integer, List<Integer>> diagonalMap = new HashMap<>();
15-
int rows = matrix.length;
16-
int cols = matrix[0].length;
17-
for (int i = 0; i < rows; i++) {
18-
for (int j = 0; j < cols; j++) {
19-
int key = i - j;
20-
diagonalMap.putIfAbsent(key, new ArrayList<>());
21-
diagonalMap.get(key).add(matrix[i][j]);
8+
public int[][] sortMatrix(int[][] grid) {
9+
int top = 0;
10+
int left = 0;
11+
int right = grid[0].length - 1;
12+
while (top < right) {
13+
int x = grid[0].length - 1 - left;
14+
int[] arr = new int[left + 1];
15+
for (int i = top; i <= left; i++) {
16+
arr[i] = grid[i][x++];
2217
}
23-
}
24-
for (Map.Entry<Integer, List<Integer>> entry : diagonalMap.entrySet()) {
25-
List<Integer> values = entry.getValue();
26-
if (entry.getKey() < 0) {
27-
Collections.sort(values);
28-
} else {
29-
values.sort(Collections.reverseOrder());
18+
Arrays.sort(arr);
19+
x = grid[0].length - 1 - left;
20+
for (int i = top; i <= left; i++) {
21+
grid[i][x++] = arr[i];
3022
}
23+
left++;
24+
right--;
3125
}
32-
for (int i = 0; i < rows; i++) {
33-
for (int j = 0; j < cols; j++) {
34-
int key = i - j;
35-
matrix[i][j] = diagonalMap.get(key).remove(0);
26+
int bottom = grid.length - 1;
27+
int x = 0;
28+
while (top <= bottom) {
29+
int[] arr = new int[bottom + 1];
30+
for (int i = 0; i < arr.length; i++) {
31+
arr[i] = grid[x + i][i];
32+
}
33+
Arrays.sort(arr);
34+
for (int i = 0; i < arr.length; i++) {
35+
grid[x + i][i] = arr[arr.length - 1 - i];
3636
}
37+
bottom--;
38+
x++;
3739
}
38-
return matrix;
40+
return grid;
3941
}
4042
}
Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,34 @@
11
package g3401_3500.s3447_assign_elements_to_groups_with_constraints;
22

3-
// #Medium #2025_02_09_Time_527_ms_(_%)_Space_70.23_MB_(_%)
3+
// #Medium #Array #Hash_Table #2025_02_11_Time_7_ms_(99.06%)_Space_64.05_MB_(91.85%)
44

5-
import java.util.HashMap;
6-
import java.util.Map;
5+
import java.util.Arrays;
76

87
public class Solution {
98
public int[] assignElements(int[] groups, int[] elements) {
10-
Map<Integer, Integer> elementIndexMap = new HashMap<>();
11-
for (int i = 0; i < elements.length; i++) {
12-
elementIndexMap.putIfAbsent(elements[i], i);
9+
int i;
10+
int j;
11+
int n = (int) (1e5 + 1);
12+
int maxi = 0;
13+
for (i = 0; i < groups.length; i++) {
14+
maxi = Math.max(maxi, groups[i]);
1315
}
14-
int[] result = new int[groups.length];
15-
for (int i = 0; i < groups.length; i++) {
16-
result[i] = findSmallestIndex(groups[i], elementIndexMap);
17-
}
18-
return result;
19-
}
20-
21-
private int findSmallestIndex(int groupSize, Map<Integer, Integer> elementIndexMap) {
22-
int minIndex = Integer.MAX_VALUE;
23-
for (int i = 1; i * i <= groupSize; i++) {
24-
if (groupSize % i == 0) {
25-
if (elementIndexMap.containsKey(i)) {
26-
minIndex = Math.min(minIndex, elementIndexMap.get(i));
27-
}
28-
if (i != groupSize / i && elementIndexMap.containsKey(groupSize / i)) {
29-
minIndex = Math.min(minIndex, elementIndexMap.get(groupSize / i));
16+
n = maxi + 1;
17+
int[] arr = new int[n];
18+
int[] ans = new int[groups.length];
19+
Arrays.fill(arr, -1);
20+
for (i = 0; i < elements.length; i++) {
21+
if (elements[i] < n && arr[elements[i]] == -1) {
22+
for (j = elements[i]; j < n; j += elements[i]) {
23+
if (arr[j] == -1) {
24+
arr[j] = i;
25+
}
3026
}
3127
}
3228
}
33-
return minIndex == Integer.MAX_VALUE ? -1 : minIndex;
29+
for (i = 0; i < groups.length; i++) {
30+
ans[i] = arr[groups[i]];
31+
}
32+
return ans;
3433
}
3534
}

src/main/java/g3401_3500/s3448_count_substrings_divisible_by_last_digit/Solution.java

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

3-
// #Hard #2025_02_09_Time_20_ms_(100.00%)_Space_47.10_MB_(100.00%)
3+
// #Hard #String #Dynamic_Programming #2025_02_11_Time_23_ms_(83.08%)_Space_46.71_MB_(58.21%)
44

55
@SuppressWarnings("java:S107")
66
public class Solution {
Lines changed: 35 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,47 @@
11
package g3401_3500.s3449_maximize_the_minimum_game_score;
22

3-
// #Hard #2025_02_09_Time_278_ms_(100.00%)_Space_54.25_MB_(100.00%)
3+
// #Hard #Array #Greedy #Binary_Search #2025_02_11_Time_188_ms_(100.00%)_Space_52.73_MB_(92.19%)
44

55
public class Solution {
6-
public long maxScore(int[] points, int m) {
6+
private boolean judge(int[] points, long m, long tgt) {
7+
long cur = 0L;
8+
long nxt = 0L;
79
int n = points.length;
8-
if (m < n) {
9-
return 0;
10-
}
11-
long lo = 1;
12-
long hi = (long) 1e18;
13-
long ans = 0;
14-
while (lo <= hi) {
15-
long mid = lo + (hi - lo) / 2;
16-
long tot = 0;
17-
long tr = 0;
18-
long skip = 0;
19-
for (int i = 0; i < n && tot <= m; i++) {
20-
int p = points[i];
21-
long need = (mid + p - 1L) / p;
22-
if (tr >= need) {
23-
tr = 0;
24-
skip++;
25-
} else {
26-
long cur = tr * p;
27-
long ops = (mid - cur + p - 1L) / p;
28-
tot += 2 * ops - 1 + skip;
29-
tr = Math.max(ops - 1, 0);
30-
skip = 0;
10+
for (int i = 0; i < n; i++) {
11+
if (i == n - 1 && nxt >= tgt) {
12+
return true;
13+
}
14+
m--;
15+
cur = nxt + points[i];
16+
nxt = 0;
17+
if (cur < tgt) {
18+
long req = (tgt - cur - 1) / points[i] + 1;
19+
if (i < n - 1) {
20+
nxt = points[i + 1] * req;
3121
}
22+
m -= req * 2;
3223
}
33-
if (tot <= m) {
34-
ans = mid;
35-
lo = mid + 1;
24+
if (m < 0) {
25+
return false;
26+
}
27+
}
28+
return true;
29+
}
30+
31+
public long maxScore(int[] points, int m) {
32+
long x = 0L;
33+
long y = 10000000L * m;
34+
while (x < y - 1) {
35+
long mid = (x + y) / 2;
36+
if (judge(points, m, mid)) {
37+
x = mid;
3638
} else {
37-
hi = mid - 1;
39+
y = mid - 1;
3840
}
3941
}
40-
return ans;
42+
while (judge(points, m, x + 1)) {
43+
x++;
44+
}
45+
return x;
4146
}
4247
}

0 commit comments

Comments
 (0)