public int[] advantageCount(int[] nums1, int[] nums2) {
//田忌赛马:每次在A中寻找大于bi的最小值,如果没有,则返回A中最小值
if (nums1 == null || nums1.length == 0) return null;
int[] res = new int[nums1.length];
// 如果A最小的马<=B最小的马 则让A最小的马和B最大的马对
// 如果A最小的马>B最小的马 则让A最小的马和B最小的马对
Arrays.sort(nums1);
int n = nums1.length;
//保存nums2马的位置
int[][] sortB = new int[n][2];
for (int i = 0; i < n; i++) {
sortB[i] = new int[]{nums2[i],i};
}
Arrays.sort(sortB,(a,b)->a[0]-b[0]);
int left = 0;
int right = n -1;
for (int i = 0; i < n; i++) {
if(nums1[i] <= sortB[left][0]){
res[sortB[right--][1]] = nums1[i];//让num2中最大的马对应nums1中最小的马
}else {
res[sortB[left++][1]] = nums1[i];
}
}
return res;
}
leetcode870 田忌赛马
最新推荐文章于 2023-04-10 10:38:34 发布