给定两个以 升序排列 的整数数组 nums1 和 nums2 , 以及一个整数 k 。
定义一对值 (u,v),其中第一个元素来自 nums1,第二个元素来自 nums2 。
请找到和最小的 k 个数对 (u1,v1), (u2,v2) ... (uk,vk) 。
class Solution {
public List<List<Integer>> kSmallestPairs(int[] nums1, int[] nums2, int k) {
List<List<Integer>> ans = new ArrayList<>(k);
for (int i = 0; i < Math.min(nums1.length, k); i++) {
for (int j = 0; j < Math.min(nums2.length, k); j++) {
ans.add(Arrays.asList(nums1[i], nums2[j]));
}
}
ans.sort(Comparator.comparingInt(item -> item.get(0) + item.get(1)));
int len = Math.min(ans.size(), k);
return ans.subList(0, len);
}
}
方法:
数组1,取前min(nums1.length, k)个数,
数组2,取前min(nums2.length, k)个数,
组合后排序,再取前min(ans.size(), k)个和,即为答案
时间复杂度是k^2 * log(k^2