1public List<int[]> kSmallestPairs(int[] nums1, int[] nums2, int k) {
2 List<int[]> result = new ArrayList<>();
3 if (nums1.length == 0 || nums2.length == 0 || k == 0) {
4 return result;
5 }
6
7 PriorityQueue<int[]> minHeap = new PriorityQueue<>((a, b) -> (a[0] + a[1]) - (b[0] + b[1]));
8
9 // Initialize heap with first element of nums2 and elements from nums1
10 for (int i = 0; i < nums1.length && i < k; i++) {
11 minHeap.offer(new int[] { nums1[i], nums2[0], 0 });
12 }
13
14 // Extract k smallest pairs
15 while (k-- > 0 && !minHeap.isEmpty()) {
16 int[] curr = minHeap.poll();
17 result.add(new int[] { curr[0], curr[1] });
18
19 // Add next pair from same row if available
20 if (curr[2] == nums2.length - 1) {
21 continue;
22 }
23 minHeap.offer(new int[] { curr[0], nums2[curr[2] + 1], curr[2] + 1 });
24 }
25 return result;
26}