文章阅读
文章阅读
总结:将齐王和田忌的马按照战斗力进行排序,打得过(大于)就打,打不过(小于等于)就用自己的垃圾和对方的精锐互换
题目
870. 优势洗牌
class Solution {
public int[] advantageCount(int[] nums1, int[] nums2) {
Arrays.sort(nums1);//自己的马,从小到大排序
PriorityQueue<int[]> pq = new PriorityQueue<>((a, b) -> b[1] - a[1]);//齐王的马从大到小排序
for(int i = 0; i < nums2.length; i++){
pq.offer(new int[]{i, nums2[i]});
}
//双指针技巧
int left = 0, right = nums1.length - 1;
int[] res = new int[nums1.length];
while(!pq.isEmpty()){
int[] p = pq.poll();
int idx = p[0], val = p[1];
if(val >= nums1[right]){
//齐王最强的马大于等于自己最强的马,用最差的换
res[idx] = nums1[left++];
}else{
//自己最强的马大于齐王最强的马,保持优势
res[idx] = nums1[right--];
}
}
return res;
}
}