贪心思想:
通过对数组进行排序,随后不断考虑数组的头元素
如果nums1的元素大于nums2的元素,则这个数字是正确的且是差值最接近的元素,ans添加元素,nums1和nums2同时右移。
如果nums1的元素小于nums2的元素,则把nums1的最后一个元素放到这个位置,nums1右移,nums2左移,保持优势最大。按照此思想数据就是最优的。
class Solution {
public:
vector<int> advantageCount(vector<int>& nums1, vector<int>& nums2)
{
int n=nums2.size();
vector<int>ans(n);
vector<int>idx1(n),idx2(n);
iota(idx1.begin(),idx1.end(),0); //类似于for循环,按照+1往里添加元素
iota(idx2.begin(),idx2.end(),0);
//降序排列 如果nums1第一位数据大于nums2第一位数据 存入ans,去除头部元素 否则去掉nums2的最后一个元素
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];});
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;
}
};