跳到主要内容

870.优势洗牌

链接:870.优势洗牌
难度:Medium
标签:贪心、数组、双指针、排序
简介:返回 nums1 的任意排列,使其相对于 nums2 的优势最大化。

题解 1 - cpp

  • 编辑时间:2022-10-08
  • 执行用时:164ms
  • 内存消耗:58.3MB
  • 编程语言:cpp
  • 解法介绍:排序下标数组后,从大往小判断。
class Solution {
public:
vector<int> advantageCount(vector<int>& nums1, vector<int>& nums2) {
int n = nums1.size();
vector<int> ans(n), inums1(n), inums2(n);
for (int i = 0; i < n; i++) inums1[i] = inums2[i] = i;
sort(inums1.begin(), inums1.end(), [&](int i1, int i2){ return nums1[i1] < nums1[i2]; });
sort(inums2.begin(), inums2.end(), [&](int i1, int i2){ return nums2[i1] < nums2[i2]; });
int e1 = n - 1, s1 = 0, i2 = n - 1;
while (e1 >= s1) {
if (nums1[inums1[e1]] > nums2[inums2[i2]]) ans[inums2[i2]] = nums1[inums1[e1--]];
else ans[inums2[i2]] = nums1[inums1[s1++]];
i2--;
}
return ans;
}
};