主函数里边是测试数据,中间死在了num5和num6,后来查了查是因为排序有bug,所以改掉了注释的判断条件必须有==返回0
主要就是暴力解决,写了俩小时,吐了
先给出答案,然后是我写的测试的全部代码,可以直接运行:
解题代码
public List<List<Integer>> kSmallestPairs(int[] nums1, int[] nums2, int k) { List<List<Integer>> reliList = new ArrayList<>(); if (nums1.length == 0 || nums2.length == 0) return reliList;// 不能返回null,必须先声明,所以在这 if(k <= 0)return reliList; int[][] arr = new int[nums1.length * nums2.length][2];//暴力的数组 int count = 0; for (int i = 0; i < nums1.length; ++i) {// 暴力 for (int j = 0; j < nums2.length; ++j) { arr[count][0] = nums1[i]; arr[count++][1] = nums2[j]; } } Comparator<int[]> cmp = new Comparator<int[]>() { @Override public int compare(int[] o1, int[] o2) { // TODO Auto-generated method stub if((o1[0] + o1[1]) > (o2[0] + o2[1])){ return 1; }else if((o1[0] + o1[1]) == (o2[0] + o2[1])) { return 0; }else { return -1; } //return (o1[0] + o1[1]) >= o2[0] + o2[1] ? 1 : -1;// 不能用这个做判断条件,排序Arrays.sort算法有bug } }; Arrays.sort(arr, cmp); for (int i = 0; i < arr.length && reliList.size() < k; ++i) { List<Integer> newList = new ArrayList<Integer>(); newList.add(arr[i][0]); newList.add(arr[i][1]); //System.out.println(arr[i][0]+" "+arr[i][1]); reliList.add(newList); } return reliList; }
全部调试代码
package st; import java.util.List; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; public class Min_K { public static void main(String[] args) { Min_K min_K = new Min_K(); int[] num1 = { 1, 7, 11 }; int[] num2 = { 2, 4, 6 }; int[] num3 = { 1, 1, 2 }; int[] num4 = { 1, 2, 3 }; int[] num5 = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; int[] num6 = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; List<List<Integer>> newlistList = min_K.kSmallestPairs(num1, num2, 3); List<List<Integer>> newlistList2 = min_K.kSmallestPairs(num3, num4, 2); System.out.println(); System.out.println(); List<List<Integer>> newlistList3 = min_K.kSmallestPairs(num5,num6,1000); } public List<List<Integer>> kSmallestPairs(int[] nums1, int[] nums2, int k) { List<List<Integer>> reliList = new ArrayList<>();// 不能返回null if (nums1.length == 0 || nums2.length == 0) return reliList; if (k <= 0) return reliList; int[][] arr = new int[nums1.length * nums2.length][2];// int count = 0; for (int i = 0; i < nums1.length; ++i) {// 暴力 for (int j = 0; j < nums2.length; ++j) { arr[count][0] = nums1[i]; arr[count++][1] = nums2[j]; } } Comparator<int[]> cmp = new Comparator<int[]>() { @Override public int compare(int[] o1, int[] o2) { // TODO Auto-generated method stub if((o1[0] + o1[1]) > (o2[0] + o2[1])){ return 1; }else if((o1[0] + o1[1]) == (o2[0] + o2[1])) { return 0; }else { return -1; } //return (o1[0] + o1[1]) >= o2[0] + o2[1] ? 1 : -1;// 不能用这个,排序Arrays.sort算法有bug } }; Arrays.sort(arr, cmp); /* * System.out.println("sort~~~~~~"); for(int i=0;i<arr.length;++i) { * System.out.println(arr[i][0]+" "+arr[i][1]); } * * * System.out.println("k~~~~~~"); */ for (int i = 0; i < arr.length && reliList.size() < k; ++i) { List<Integer> newList = new ArrayList<Integer>(); newList.add(arr[i][0]); newList.add(arr[i][1]); //System.out.println(arr[i][0]+" "+arr[i][1]); reliList.add(newList); } return reliList; } }