参考的这个博客:
https://zhuanlan.zhihu.com/p/457239781
然后看这个代码我想到了另外一种方法,就是一步一步往里加元组 ( i , j ) (i,j) (i,j),看代码就知道了,不过需要做一步去重,去重不能用 i n t [ ] int[] int[]做,转换成字符串做比较好。
class Solution {public List<List<Integer>> kSmallestPairs(int[] nums1, int[] nums2, int k) {List<List<Integer>> ans = new ArrayList<>();PriorityQueue<int[]> q = new PriorityQueue<>((a,b)->((nums1[a[0]]+nums2[a[1]])-(nums1[b[0]]+nums2[b[1]])));// for(int i=0;i<nums1.length;i++){// q.add(new int[]{i,0});// }q.add(new int[]{0,0});HashMap<String,Integer> mp = new HashMap<String,Integer>();mp.put((Arrays.toString(new int[]{0,0})),1);while(ans.size()<k && !q.isEmpty()){int[] poll = q.poll();int a = poll[0];int b = poll[1];ArrayList<Integer> arr = new ArrayList<Integer>();arr.add(nums1[a]);arr.add(nums2[b]);ans.add(arr);if(b+1<nums2.length && !mp.containsKey(Arrays.toString(new int[]{a,b+1}))){mp.put((Arrays.toString(new int[]{a,b+1})),1); q.add(new int[]{a,b+1});} if(a+1<nums1.length && !mp.containsKey(Arrays.toString(new int[]{a+1,b}))){q.add(new int[]{a+1,b}); mp.put((Arrays.toString(new int[]{a+1,b})),1);} if(a+1<nums1.length && b+1<nums2.length && !mp.containsKey(Arrays.toString(new int[]{a+1,b+1}))){q.add(new int[]{a+1,b+1});mp.put((Arrays.toString(new int[]{a+1,b+1})),1);} }return ans;}
}