Skip to content

Commit 5b45347

Browse files
authored
Update _373.java (fishercoder1534#98)
1 parent 17f87bc commit 5b45347

File tree

1 file changed

+38
-52
lines changed
  • src/main/java/com/fishercoder/solutions

1 file changed

+38
-52
lines changed

src/main/java/com/fishercoder/solutions/_373.java

+38-52
Original file line numberDiff line numberDiff line change
@@ -6,60 +6,46 @@
66
import java.util.Queue;
77

88
public class _373 {
9-
public static class Solution1 {
109

11-
final int[][] neighbors = new int[][]{{0, 1}, {1, 0}};
12-
13-
public List<int[]> kSmallestPairs(int[] nums1, int[] nums2, int k) {
14-
List<int[]> result = new ArrayList<>();
15-
if (nums1 == null
16-
|| nums2 == null
17-
|| k == 0
18-
|| nums1.length == 0
19-
|| nums2.length == 0) {
20-
return result;
21-
}
22-
Queue<Pair> meanHeap = new PriorityQueue<>();
23-
meanHeap.offer(new Pair(0, 0, nums1[0] + nums2[0]));
24-
boolean[][] visited = new boolean[nums1.length][nums2.length];
25-
visited[0][0] = true;//we start form (0,0), so mark it as visited
26-
while (k > 0 && !meanHeap.isEmpty()) {
27-
Pair pair = meanHeap.poll();
28-
result.add(new int[]{nums1[pair.row], nums2[pair.col]});
29-
k--;
30-
for (int[] neighbor : neighbors) {
31-
int nextRow = pair.row + neighbor[0];
32-
int nextCol = pair.col + neighbor[1];
33-
if (nextRow < 0
34-
|| nextCol < 0
35-
|| nextRow >= nums1.length
36-
|| nextCol >= nums2.length
37-
|| visited[nextRow][nextCol]) {
38-
continue;
39-
}
40-
visited[nextRow][nextCol] = true;
41-
meanHeap.offer(new Pair(nextRow, nextCol, nums1[nextRow] + nums2[nextCol]));
42-
}
43-
}
44-
45-
return result;
46-
}
47-
48-
class Pair implements Comparable<Pair> {
49-
int row;
50-
int col;
51-
int sum;
52-
53-
public Pair(int row, int col, int sum) {
54-
this.row = row;
55-
this.col = col;
56-
this.sum = sum;
57-
}
58-
59-
@Override
60-
public int compareTo(Pair that) {
61-
return this.sum - that.sum;
10+
public class Solution {
11+
12+
int[][] dirs = {{0,1},{1,0},{1,1}};
13+
public List<List<Integer>> kSmallestPairs(int[] nums1, int[] nums2, int k) {
14+
15+
List<List<Integer>> result = new ArrayList<>();
16+
17+
// EDGE CASE
18+
if(nums1==null || nums2==null || nums1.length==0 || nums2.length==0) return result;
19+
20+
// visited array
21+
boolean[][] visited = new boolean[nums1.length][nums2.length];
22+
23+
// Min Heap
24+
PriorityQueue<int[]> pq = new PriorityQueue<>((a,b)->{
25+
return ( a[0]+a[1] ) - ( b[0]+b[1] ) ;
26+
});
27+
28+
int[] temp = new int[]{nums1[0],nums2[0],0,0};
29+
pq.add(temp);
30+
visited[0][0]= true;
31+
32+
while(!pq.isEmpty()){
33+
int[] arr = pq.poll();
34+
List<Integer> ls = new ArrayList<>();
35+
ls.add(arr[0]);ls.add(arr[1]);
36+
result.add(ls);
37+
38+
if(result.size()==k) break;
39+
int i=arr[2],j=arr[3];
40+
41+
for(int[] dir : dirs){
42+
int dx=i+dir[0],dy=j+dir[1];
43+
if(dx<0 || dx>=nums1.length || dy<0 || dy>=nums2.length || visited[dx][dy]) continue;
44+
pq.add(new int[]{nums1[dx],nums2[dy],dx,dy});
45+
visited[dx][dy] = true;
6246
}
6347
}
48+
return result;
6449
}
50+
}
6551
}

0 commit comments

Comments
 (0)