Skip to content

Commit e7d6029

Browse files
committed
Improved tags
1 parent b820981 commit e7d6029

File tree

8 files changed

+133
-112
lines changed

8 files changed

+133
-112
lines changed

src/main/java/g3201_3300/s3270_find_the_key_of_the_numbers/Solution.java

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

3-
// #Easy #2024_09_02_Time_0_ms_(100.00%)_Space_40.5_MB_(100.00%)
3+
// #Easy #Math #2024_09_02_Time_0_ms_(100.00%)_Space_40.5_MB_(100.00%)
44

55
public class Solution {
66
public int generateKey(int num1, int num2, int num3) {

src/main/java/g3201_3300/s3271_hash_divided_string/Solution.java

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

3-
// #Medium #2024_09_02_Time_2_ms_(100.00%)_Space_44.7_MB_(100.00%)
3+
// #Medium #String #Simulation #2024_09_02_Time_2_ms_(100.00%)_Space_44.7_MB_(100.00%)
44

55
public class Solution {
66
public String stringHash(String s, int k) {

src/main/java/g3201_3300/s3272_find_the_count_of_good_integers/Solution.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package g3201_3300.s3272_find_the_count_of_good_integers;
22

3-
// #Hard #2024_09_02_Time_167_ms_(100.00%)_Space_54.5_MB_(100.00%)
3+
// #Hard #Hash_Table #Math #Enumeration #Combinatorics
4+
// #2024_09_02_Time_167_ms_(100.00%)_Space_54.5_MB_(100.00%)
45

56
import java.util.ArrayList;
67
import java.util.Arrays;
@@ -11,7 +12,7 @@
1112
import java.util.Set;
1213

1314
public class Solution {
14-
private List<String> palindromes = new ArrayList<>();
15+
private final List<String> palindromes = new ArrayList<>();
1516

1617
private long factorial(int n) {
1718
long res = 1;
@@ -71,9 +72,7 @@ private void generatePalindromes(
7172

7273
private List<String> allKPalindromes(int n, int k) {
7374
StringBuilder ans = new StringBuilder(n);
74-
for (int i = 0; i < n; i++) {
75-
ans.append('0');
76-
}
75+
ans.append("0".repeat(Math.max(0, n)));
7776
int[] rem = new int[n];
7877
rem[0] = 1;
7978
for (int i = 1; i < n; i++) {
Lines changed: 42 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,56 @@
11
package g3201_3300.s3273_minimum_amount_of_damage_dealt_to_bob;
22

3-
// #Hard #2024_09_02_Time_221_ms_(100.00%)_Space_59.9_MB_(100.00%)
3+
// #Hard #Array #Sorting #Greedy #2024_09_04_Time_76_ms_(100.00%)_Space_59.5_MB_(61.02%)
44

5-
import java.util.ArrayList;
6-
import java.util.Collections;
7-
import java.util.List;
5+
import java.util.Arrays;
86

9-
@SuppressWarnings("java:S1210")
107
public class Solution {
11-
int total;
12-
int power;
8+
public long minDamage(int pw, int[] damage, int[] health) {
9+
long res = 0;
10+
long sum = 0;
11+
for (int e : damage) {
12+
sum += e;
13+
}
14+
Pair[] pairs = new Pair[damage.length];
15+
for (int e = 0; e < damage.length; e++) {
16+
pairs[e] = new Pair(damage[e], (health[e] + pw - 1) / pw);
17+
}
18+
Arrays.sort(pairs);
19+
for (Pair pr : pairs) {
20+
res += pr.val * sum;
21+
sum -= pr.key;
22+
}
23+
return res;
24+
}
1325

14-
private class Pair implements Comparable<Pair> {
15-
int health;
16-
int damage;
26+
private static class Pair implements Comparable<Pair> {
27+
public int key;
28+
public int val;
1729

18-
Pair(int health, int damage) {
19-
this.health = health;
20-
this.damage = damage;
30+
Pair(int key, int val) {
31+
this.key = key;
32+
this.val = val;
2133
}
2234

2335
@Override
24-
public int compareTo(Pair p) {
25-
int thisHits = (int) Math.ceil((double) this.health / power);
26-
int otherHits = (int) Math.ceil((double) p.health / power);
27-
double thisTotalDamage = this.damage * 1.0 / thisHits;
28-
double otherTotalDamage = p.damage * 1.0 / otherHits;
29-
return Double.compare(otherTotalDamage, thisTotalDamage);
36+
public boolean equals(Object o) {
37+
Pair p1 = (Pair) o;
38+
return key == p1.key && val == p1.val;
3039
}
31-
}
3240

33-
public long minDamage(int power, int[] damage, int[] health) {
34-
this.power = power;
35-
total = 0;
36-
List<Pair> pairs = new ArrayList<>();
37-
for (int i = 0; i < damage.length; i++) {
38-
pairs.add(new Pair(health[i], damage[i]));
39-
}
40-
Collections.sort(pairs);
41-
long totalDamage = 0;
42-
int hitsRequired = 0;
43-
for (Pair pair : pairs) {
44-
hitsRequired += (int) Math.ceil((double) pair.health / power);
45-
totalDamage += (long) hitsRequired * pair.damage;
46-
}
47-
return totalDamage;
41+
@Override
42+
public int hashCode() {
43+
return key ^ val;
44+
}
45+
46+
@Override
47+
public String toString() {
48+
return "[" + key + " - " + val + "]";
49+
}
50+
51+
@Override
52+
public int compareTo(Pair p) {
53+
return val * p.key - key * p.val;
54+
}
4855
}
4956
}

src/main/java/g3201_3300/s3274_check_if_two_chessboard_squares_have_the_same_color/Solution.java

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

3-
// #Easy #2024_09_02_Time_0_ms_(100.00%)_Space_41.8_MB_(100.00%)
3+
// #Easy #String #Math #2024_09_02_Time_0_ms_(100.00%)_Space_41.8_MB_(100.00%)
44

55
public class Solution {
66
public boolean checkTwoChessboards(String c1, String c2) {
Lines changed: 42 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,51 @@
11
package g3201_3300.s3275_k_th_nearest_obstacle_queries;
22

3-
// #Medium #2024_09_02_Time_126_ms_(100.00%)_Space_129.6_MB_(100.00%)
4-
5-
import java.util.Arrays;
6-
import java.util.PriorityQueue;
3+
// #Medium #Array #Heap_Priority_Queue #2024_09_04_Time_33_ms_(100.00%)_Space_162_MB_(37.19%)
74

85
public class Solution {
96
public int[] resultsArray(int[][] queries, int k) {
10-
int[] output = new int[queries.length];
11-
Arrays.fill(output, -1);
12-
PriorityQueue<int[]> heap =
13-
new PriorityQueue<>(
14-
(a, b) ->
15-
(Math.abs(b[0]) + Math.abs(b[1]))
16-
- (Math.abs(a[0]) + Math.abs(a[1])));
17-
for (int i = 0; i < output.length; ++i) {
18-
heap.offer(queries[i]);
19-
if (heap.size() > k) {
20-
heap.poll();
21-
}
22-
if (heap.size() == k) {
23-
int[] currkth = heap.peek();
24-
output[i] = Math.abs(currkth[0]) + Math.abs(currkth[1]);
7+
final int len = queries.length;
8+
int[] results = new int[len];
9+
int[] heap = new int[k];
10+
for (int i = 0; i < k && i < len; i++) {
11+
int[] query = queries[i];
12+
heap[i] = Math.abs(query[0]) + Math.abs(query[1]);
13+
results[i] = -1;
14+
}
15+
if (k <= len) {
16+
buildMaxHeap(heap, k);
17+
results[k - 1] = heap[0];
18+
}
19+
for (int i = k; i < len; i++) {
20+
int[] query = queries[i];
21+
int dist = Math.abs(query[0]) + Math.abs(query[1]);
22+
if (dist < heap[0]) {
23+
heap[0] = dist;
24+
heapify(heap, 0, k);
2525
}
26+
results[i] = heap[0];
27+
}
28+
return results;
29+
}
30+
31+
private void buildMaxHeap(int[] heap, int size) {
32+
for (int i = size / 2 - 1; i >= 0; i--) {
33+
heapify(heap, i, size);
34+
}
35+
}
36+
37+
private void heapify(int[] heap, int index, int size) {
38+
int root = heap[index];
39+
final int left = 2 * index + 1;
40+
final int right = 2 * index + 2;
41+
if (right < size && root < heap[right] && heap[left] < heap[right]) {
42+
heap[index] = heap[right];
43+
heap[right] = root;
44+
heapify(heap, right, size);
45+
} else if (left < size && root < heap[left]) {
46+
heap[index] = heap[left];
47+
heap[left] = root;
48+
heapify(heap, left, size);
2649
}
27-
return output;
2850
}
2951
}
Lines changed: 27 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,44 @@
11
package g3201_3300.s3276_select_cells_in_grid_with_maximum_score;
22

3-
// #Hard #2024_09_02_Time_36_ms_(100.00%)_Space_48.5_MB_(100.00%)
3+
// #Hard #Array #Dynamic_Programming #Matrix #Bit_Manipulation #Bitmask
4+
// #2024_09_04_Time_6_ms_(99.82%)_Space_44.1_MB_(91.67%)
45

5-
import java.util.ArrayList;
66
import java.util.Arrays;
77
import java.util.List;
88

99
public class Solution {
1010
public int maxScore(List<List<Integer>> grid) {
1111
int n = grid.size();
1212
int m = grid.get(0).size();
13-
List<List<Integer>> list = new ArrayList<>();
14-
for (int i = 0; i <= 100; i++) {
15-
list.add(new ArrayList<>());
16-
}
17-
int max = 0;
13+
int[][] arr = new int[n * m][2];
1814
for (int i = 0; i < n; i++) {
19-
for (int j = 0; j < m; j++) {
20-
int num = grid.get(i).get(j);
21-
list.get(num).add(i);
22-
max = Math.max(grid.get(i).get(j), max);
15+
List<Integer> l = grid.get(i);
16+
for (int j = 0; j < l.size(); j++) {
17+
arr[i * m + j][0] = l.get(j);
18+
arr[i * m + j][1] = i;
2319
}
2420
}
25-
int[][] dp = new int[max + 1][(1 << n) * 2 - 1];
26-
for (int[] arr : dp) {
27-
Arrays.fill(arr, -1);
28-
}
29-
return helper(max, 0, list, dp);
30-
}
31-
32-
private int helper(int n, int mask, List<List<Integer>> list, int[][] dp) {
33-
if (n == 0) {
34-
return 0;
35-
}
36-
if (dp[n][mask] != -1) {
37-
return dp[n][mask];
38-
}
39-
int take = Integer.MIN_VALUE;
40-
for (int row : list.get(n)) {
41-
if ((mask & (1 << row)) != 0) {
42-
continue;
21+
Arrays.sort(arr, (a, b) -> b[0] - a[0]);
22+
int[] dp = new int[1 << n];
23+
for (int i = 0; i < arr.length; ) {
24+
boolean[] seen = new boolean[n];
25+
seen[arr[i][1]] = true;
26+
int v = arr[i][0];
27+
for (i++; i < arr.length && arr[i][0] == v; i++) {
28+
seen[arr[i][1]] = true;
29+
}
30+
int[] next = Arrays.copyOf(dp, dp.length);
31+
for (int j = 0; j < n; j++) {
32+
if (seen[j]) {
33+
int and = ((1 << n) - 1) ^ (1 << j);
34+
for (int k = and; k > 0; k = (k - 1) & and) {
35+
next[k | (1 << j)] = Math.max(next[k | (1 << j)], dp[k] + v);
36+
}
37+
next[1 << j] = Math.max(next[1 << j], v);
38+
}
4339
}
44-
take = Math.max(n + helper(n - 1, mask | (1 << row), list, dp), take);
40+
dp = next;
4541
}
46-
int notTake = helper(n - 1, mask, list, dp);
47-
dp[n][mask] = Math.max(take, notTake);
48-
return dp[n][mask];
42+
return dp[dp.length - 1];
4943
}
5044
}

src/main/java/g3201_3300/s3277_maximum_xor_score_subarray_queries/Solution.java

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,29 @@
11
package g3201_3300.s3277_maximum_xor_score_subarray_queries;
22

3-
// #Hard #2024_09_02_Time_62_ms_(100.00%)_Space_90.5_MB_(100.00%)
3+
// #Hard #Array #Dynamic_Programming #2024_09_04_Time_29_ms_(98.87%)_Space_104.3_MB_(65.54%)
44

5-
@SuppressWarnings("java:S3012")
65
public class Solution {
76
public int[] maximumSubarrayXor(int[] nums, int[][] queries) {
87
int n = nums.length;
9-
int[][] t = new int[n][n];
10-
for (int j = 0; j < n; j++) {
11-
t[j][j] = nums[j];
8+
int[][] dp = new int[n][n];
9+
for (int i = 0; i < n; i++) {
10+
dp[i][i] = nums[i];
1211
}
13-
for (int j = 1; j < n; j++) {
14-
for (int i = 0; i + j < n; i++) {
15-
t[i][i + j] = t[i][i + j - 1] ^ t[i + 1][i + j];
12+
for (int i = n - 2; i >= 0; i--) {
13+
for (int j = i + 1; j < n; j++) {
14+
dp[i][j] = dp[i][j - 1] ^ dp[i + 1][j];
1615
}
1716
}
18-
for (int j = 1; j < n; j++) {
19-
for (int i = 0; i + j < n; i++) {
20-
t[i][i + j] = Math.max(t[i][i + j], Math.max(t[i][i + j - 1], t[i + 1][i + j]));
17+
for (int i = n - 2; i >= 0; i--) {
18+
for (int j = i + 1; j < n; j++) {
19+
dp[i][j] = Math.max(dp[i][j], Math.max(dp[i][j - 1], dp[i + 1][j]));
2120
}
2221
}
23-
int[] ans = new int[queries.length];
24-
for (int i = 0; i < queries.length; i++) {
25-
int l = queries[i][0];
26-
int r = queries[i][1];
27-
ans[i] = t[l][r];
22+
int q = queries.length;
23+
int[] ans = new int[q];
24+
int time = 0;
25+
for (int[] query : queries) {
26+
ans[time++] = dp[query[0]][query[1]];
2827
}
2928
return ans;
3029
}

0 commit comments

Comments
 (0)