用java写的,大概的意思就是先把两个数组的笛卡尔集放入list中,在直接排序,再利用java自带的sublist函数找出前k个
public class Solution {
public List<int[]> kSmallestPairs(int[] nums1, int[] nums2, int k) {
List<int[]> ll = new ArrayList<>();
for (int i = 0; i < nums1.length; i++) {
for (int j = 0; j < nums2.length; j++) {
int[] a = new int[2];
a[0] = nums1[i];
a[1] = nums2[j];
ll.add(a);
}
}
ll.sort(new c());
if (k > ll.size()) {
return ll;
}
return ll.subList(0, k);
}
static class c implements Comparator {
@Override
public int compare(Object o1, Object o2) {
int[] a = (int[]) o1;
int[] b = (int[]) o2;
int sum1 = 0, sum2 = 0;
for (int i = 0; i < a.length; i++) {
sum1 += a[i];
}
for (int i = 0; i < b.length; i++) {
sum2 += b[i];
}
return new Integer(sum1).compareTo(new Integer(sum2));
}
}
}