Skip to content

Commit ded7209

Browse files
committed
Improved tasks 3417-3420
1 parent 0be3714 commit ded7209

File tree

4 files changed

+66
-33
lines changed

4 files changed

+66
-33
lines changed

src/main/java/g3401_3500/s3417_zigzag_grid_traversal_with_skip/Solution.java

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

3-
// #Easy #2025_01_14_Time_1_(100.00%)_Space_45.81_(35.36%)
3+
// #Easy #Array #Matrix #Simulation #2025_01_15_Time_1_(100.00%)_Space_45.56_(84.25%)
44

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

src/main/java/g3401_3500/s3418_maximum_amount_of_money_robot_can_earn/Solution.java

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

3-
// #Medium #2025_01_14_Time_12_(99.87%)_Space_71.91_(98.93%)
3+
// #Medium #Array #Dynamic_Programming #Matrix #2025_01_15_Time_12_(99.86%)_Space_72.43_(98.47%)
44

55
public class Solution {
66
public int maximumAmount(int[][] coins) {
Lines changed: 62 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,85 @@
11
package g3401_3500.s3419_minimize_the_maximum_edge_weight_of_graph;
22

3-
// #Medium #2025_01_14_Time_51_(99.43%)_Space_119.08_(34.00%)
3+
// #Medium #Binary_Search #Graph #Shortest_Path #Depth_First_Search #Breadth_First_Search
4+
// #2025_01_15_Time_64_(99.28%)_Space_110.17_(57.63%)
45

56
import java.util.ArrayList;
67
import java.util.Arrays;
78
import java.util.LinkedList;
8-
import java.util.List;
99
import java.util.Queue;
1010

1111
@SuppressWarnings({"unchecked", "unused", "java:S1172"})
1212
public class Solution {
13+
private ArrayList<ArrayList<Pair>> adj;
14+
private ArrayList<ArrayList<Pair>> revadj;
15+
16+
private static class Pair {
17+
int node;
18+
int weight;
19+
20+
public Pair(int node, int weight) {
21+
this.node = node;
22+
this.weight = weight;
23+
}
24+
}
25+
1326
public int minMaxWeight(int n, int[][] edges, int threshold) {
14-
List<int[]>[] reversedG = new ArrayList[n];
15-
for (int i = 0; i < n; i++) {
16-
reversedG[i] = new ArrayList<>();
27+
adj = new ArrayList<>();
28+
revadj = new ArrayList<>();
29+
for (int i = 0; i <= n + 1; i++) {
30+
adj.add(new ArrayList<>());
31+
revadj.add(new ArrayList<>());
1732
}
18-
for (int[] i : edges) {
19-
int a = i[0];
20-
int b = i[1];
21-
int w = i[2];
22-
reversedG[b].add(new int[] {a, w});
33+
for (int[] edge : edges) {
34+
int u = edge[0];
35+
int v = edge[1];
36+
int wt = edge[2];
37+
adj.get(u).add(new Pair(v, wt));
38+
revadj.get(v).add(new Pair(u, wt));
2339
}
24-
int[] distance = new int[n];
25-
Arrays.fill(distance, Integer.MAX_VALUE);
26-
distance[0] = 0;
27-
if (reversedG[0].isEmpty()) {
40+
if (!check(n)) {
2841
return -1;
2942
}
30-
Queue<Integer> que = new LinkedList<>();
31-
que.add(0);
32-
while (!que.isEmpty()) {
33-
int cur = que.poll();
34-
for (int[] next : reversedG[cur]) {
35-
int node = next[0];
36-
int w = next[1];
37-
int nextdis = Math.max(w, distance[cur]);
38-
if (nextdis < distance[node]) {
39-
distance[node] = nextdis;
40-
que.add(node);
43+
int[] dist = new int[n + 1];
44+
Arrays.fill(dist, (int) (1e9));
45+
dist[0] = 0;
46+
Queue<Pair> q = new LinkedList<>();
47+
q.offer(new Pair(0, 0));
48+
while (q.size() > 0) {
49+
int u = q.peek().node;
50+
int currMax = q.peek().weight;
51+
q.poll();
52+
for (int i = 0; i < revadj.get(u).size(); i++) {
53+
int v = revadj.get(u).get(i).node;
54+
int wt = revadj.get(u).get(i).weight;
55+
if (dist[v] > Math.max(wt, currMax)) {
56+
dist[v] = Math.max(wt, currMax);
57+
q.offer(new Pair(v, dist[v]));
4158
}
4259
}
4360
}
44-
int ans = 0;
61+
int maxi = dist[0];
4562
for (int i = 0; i < n; i++) {
46-
if (distance[i] == Integer.MAX_VALUE) {
47-
return -1;
63+
maxi = Math.max(maxi, dist[i]);
64+
}
65+
return maxi;
66+
}
67+
68+
private boolean check(int n) {
69+
int[] vis = new int[n];
70+
ArrayList<Integer> nodes = new ArrayList<>();
71+
dfs(0, vis, nodes);
72+
return nodes.size() == n;
73+
}
74+
75+
private void dfs(int u, int[] vis, ArrayList<Integer> nodes) {
76+
nodes.add(u);
77+
vis[u] = 1;
78+
for (int i = 0; i < revadj.get(u).size(); i++) {
79+
int v = revadj.get(u).get(i).node;
80+
if (vis[v] == 0) {
81+
dfs(v, vis, nodes);
4882
}
49-
ans = Math.max(ans, distance[i]);
5083
}
51-
return ans;
5284
}
5385
}

src/main/java/g3401_3500/s3420_count_non_decreasing_subarrays_after_k_operations/Solution.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package g3401_3500.s3420_count_non_decreasing_subarrays_after_k_operations;
22

3-
// #Hard #2025_01_14_Time_29_(92.59%)_Space_62.14_(57.41%)
3+
// #Hard #Array #Two_Pointers #Stack #Monotonic_Stack #Queue #Segment_Tree #Monotonic_Queue
4+
// #2025_01_15_Time_29_(83.94%)_Space_62.04_(56.93%)
45

56
import java.util.ArrayDeque;
67
import java.util.Deque;

0 commit comments

Comments
 (0)