1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| class Solution { public List<List<Integer>> kSmallestPairs(int[] nums1, int[] nums2, int k) { List<List<Integer>> resultList = new ArrayList<>();
Queue<int[]> queue = new PriorityQueue<>((o1, o2) -> { int sum1 = nums1[o1[0]] + nums2[o1[1]]; int sum2 = nums1[o2[0]] + nums2[o2[1]]; return sum1 - sum2; });
for (int i = 0; i < Math.min(k, nums1.length); i++) { queue.offer(new int[]{i, 0}); }
while (k > 0 && !queue.isEmpty()) { int[] indexPair = queue.poll(); int indexOfNums1 = indexPair[0], indexOfNums2 = indexPair[1]; resultList.add(Arrays.asList(nums1[indexOfNums1], nums2[indexOfNums2])); k--;
if (indexOfNums2 + 1 < nums2.length) { queue.offer(new int[]{indexOfNums1, indexOfNums2 + 1}); } }
return resultList; } }
|
References
373. Find K Pairs with Smallest Sums
剑指 Offer II 061. 和最小的 k 个数对