public class Solution {
public List<List<Integer>> kSmallestPairs(int[] nums1, int[] nums2, int k) {
int nums1Length=nums1.length;
int nums2Length=nums2.length;
List<List<Integer>>result=new ArrayList<>();
k=Math.min(k,nums1Length*nums2Length);
if(k==0)return result;
Queue<Node>queue=new PriorityQueue<Node>((o1,o2)->{
return o1.val+nums2[o1.nums2Index]-o2.val-nums2[o2.nums2Index];
});
for(int i=0;i<nums1.length;i++)
{
queue.add(new Node(nums1[i],0));
}
while(k-->0)
{
Node n=queue.poll();
List<Integer>temp=new ArrayList<>();
temp.add(n.val);
temp.add(nums2[n.nums2Index]);
result.add(temp);
if(n.nums2Index+1<nums2Length)
{
n.nums2Index++;
queue.add(n);
}
}
return result;
}
class Node{
//nums1[i]的值
int val;
//nums2的坐标
int nums2Index;
public Node(int val,int nums2Index)
{
this.val=val;
this.nums2Index=nums2Index;
}
}
public static void main(String[] args) {
int[]nums1={1,1,2};
int[]nums2={1,2,3};
List<List<Integer>>result=new Solution().kSmallestPairs(nums1,nums2,10);
}
}
最小的k对数字,这代码实在是太帅了,把我都给帅到了怎么办
最新推荐文章于 2024-05-16 06:35:19 发布