题目地址:https://leetcode.cn/problems/advantage-shuffle/description/
题目描述:
示例 1:
示例 2:
提示:
解题思路(典型贪心算法)
代码实现
public class Solution{
public int[] advantageCount(int[] nums1, int[] nums2) {
//先对nums1进行排序
Arrays.sort(nums1);
//对muns2排序 但是mums2不能直接排序 需要额外借助一个数据排序
int nums2Len = nums2.length;
int [] ids = new int [nums2Len];
//记录nums2的下标
for(int i =0;i<n;i++){
ids[i]=i;
}
//将num2进行排序 注意这里不能直接对nums2排序 转对nums2的下标排序代替nums2的顺序
//升序排列 (降序也是一个样)
Arrays.sort(ids,(i,j)->nums2[i]-nums2[j]);
//赛马:打得过就打,打不过就拿自己的垃圾和对方的精锐互换
int [] ans = new int[nums1.length];
int right = nums2Len;
int left = 0;
for (int x : nums1) {
ans[x > nums2[ids[left]] ? ids[left++] : ids[right--]] = x;
}
return ans;
}
}