解题思路在于:
如果nums1最快的马比nums2最快的马还快,那么就直接用nums1这匹马跟nums2比。因为此时是最优做法。
如果nums1最快的马比nums2最快的马慢,那么nums1中任意一只马都是输,此时就选择nums1中最慢的马跟nums2比。
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
vector<int> nums1{12,24,8,32};
vector<int> nums2{13,25,32,11};
vector<int> index1(nums1.size());
vector<int> index2(nums1.size());
for(int i=0;i<nums1.size();i++){
index1[i]=i;
index2[i]=i;
}
//利用匿名表达式语法自定义比较函数,并且[&]表示以引用的方式捕获外部变量
sort(index1.begin(),index1.end(),[&](int i,int j){return nums1[i]<nums1[j];});
sort(index2.begin(),index2.end(),[&](int i,int j){return nums2[i]<nums2[j];});
int left=0,right=nums1.size()-1;
vector<int> result(nums1.size());
for(int i=nums1.size()-1;i>=0;i--){
if(nums1[index1[right]]>nums2[index2[i]]){
result[index2[i]]=nums1[index1[right]];
right--;
}else{
result[index2[i]]=nums1[index1[left]];
left++;
}
}
for(int i:result){
cout<<i<<" ";
}
system("pause");
}