Nums2的位置不能改变,所以用优先队列,存储索引的同时弄出最大值,nums1用双指针+排序,因为它位置可以比变化。
对nums2进行最大堆排序,存储索引位置和值
Nums1 sort排序即可。
class Solution {
public int[] advantageCount(int[] nums1, int[] nums2) {
PriorityQueue<int[]> maxQ=new PriorityQueue<>(
(int[] pair1, int[] pair2) -> { return pair2[1] - pair1[1];}
);
for(int i=0;i<nums2.length;i++){
maxQ.offer(new int[]{i,nums2[i]});
}
Arrays.sort(nums1);
int len=nums1.length;
int left=0,right=len-1;
int[] res=new int[len];
while(!maxQ.isEmpty()){
int[] pair=maxQ.poll();
int x=pair[0];
int y=pair[1];
if(nums1[right]>y){
res[x]=nums1[right];
right--;
}else{
res[x]=nums1[left++];//拿最小的去送人头
}
}
return res;
}
}