传送门:870. 优势洗牌
给定两个大小相等的数组 nums1 和 nums2,nums1 相对于 nums 的优势可以用满足 nums1[i] > nums2[i] 的索引 i 的数目来描述。
返回 nums1 的任意排列,使其相对于 nums2 的优势最大化。
示例 1:
输入:nums1 = [2,7,11,15], nums2 = [1,10,4,11]
输出:[2,11,7,15]
示例 2:
输入:nums1 = [12,24,8,32], nums2 = [13,25,32,11]
输出:[24,32,8,12]
提示:
1 <= nums1.length <= 10^5
nums2.length == nums1.length
0 <= nums1[i], nums2[i] <= 10^9
class Solution {
public int[] advantageCount(int[] nums1, int[] nums2) {
int n = nums1.length; //数组长度
int[] res = new int[n]; //记录最终结果
Integer[] idx = new Integer[n]; //nums2值从小到大排序对应的下标数组
for (int i = 0; i < n; i ++) idx[i] = i; //初始化idx
Arrays.sort(nums1);
Arrays.sort(idx, (i, j)->nums2[i]-nums2[j]); //根据nums2的值从小到大对idx排序
int l = 0, r = n - 1; //双指针,l和r分别为左右指针
for (int i = 0; i < n; i ++) { //按照田忌赛马进行赋值
if (nums1[i] > nums2[idx[l]]) {
res[idx[l]] = nums1[i];
l ++;
} else {
res[idx[r]] = nums1[i];
r --;
}
}
return res;
}
}
来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/advantage-shuffle
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。