给定两个大小相等的数组 nums1 和 nums2,nums1 相对于 nums2 的优势可以用满足 nums1[i] > nums2[i] 的索引 i 的数目来描述。
返回 nums1 的任意排列,使其相对于 nums2 的优势最大化。
力扣
设计思路
我的想法就是写模拟,循环找最小大于值
首先还得对第一个数组进行排序,从而找到每个刚刚大于的值
代码实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
class Solution {
public:
vector<int> advantageCount(vector<int>& nums1, vector<int>& nums2) {
vector<int> ans;
int len = nums1.size();
sort(nums1.begin(), nums1.end());
for(int i = 0; i <= len; i++)
{
for(int j = 0; j <= len; j++)
{
if(nums1[i] < nums2[j])
{
ans[i] = j;
nums2[j] = -1;
}
}
}
/////////////////////摆了摆了
}
};
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
class Solution {
public:
vector<int> advantageCount(vector<int>& nums1, vector<int>& nums2) {
int n = nums1.size();
vector<int> idx1(n), idx2(n);
iota(idx1.begin(), idx1.end(), 0);
iota(idx2.begin(), idx2.end(), 0);
sort(idx1.begin(), idx1.end(), [&](int i, int j) { return nums1[i] < nums1[j]; });
sort(idx2.begin(), idx2.end(), [&](int i, int j) { return nums2[i] < nums2[j]; });
vector<int> ans(n);
int left = 0, right = n - 1;
for (int i = 0; i < n; ++i) {
if (nums1[idx1[i]] > nums2[idx2[left]]) {
ans[idx2[left]] = nums1[idx1[i]];
++left;
}
else {
ans[idx2[right]] = nums1[idx1[i]];
--right;
}
}
return ans;
}
};
作者:LeetCode-Solution
链接:https://leetcode.cn/problems/advantage-shuffle/solution/you-shi-xi-pai-by-leetcode-solution-sqsf/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
|
正解