主函数里边是测试数据,中间死在了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;
    }
}