https://leetcode.com/contest/weekly-contest-93/problems/advantage-shuffle/
容易题,但是很有意思。田忌赛马策略
bool cmp1( pair<int, int>pa, pair<int, int>pb ) {
return pa.first < pb.first;
}
bool cmp2( pair<int, int>pa, pair<int, int>pb ) {
return pa.second < pb.second;
}
class Solution {
public:
vector< pair<int, int> > to_pair(vector<int>&a) {
vector< pair<int, int> > ret;
for (int i = 0; i < a.size(); i++) {
ret.push_back( make_pair(a[i], i) );
}
return ret;
}
vector<int> advantageCount(vector<int>& A, vector<int>& B) {
int left = 0, right = A.size() - 1;
vector<int> sa(A.begin(), A.end());
sort(sa.begin(), sa.end());
vector< pair<int, int> > pa;// = to_pair(A);
vector< pair<int, int> > pb = to_pair(B);
sort(pb.begin(), pb.end(), cmp1);
for (int i = A.size()-1; i >= 0; i--) {
if (pb[i].first >= sa[right]) {
pa.push_back( make_pair(sa[left++], pb[i].second) );
} else {
pa.push_back( make_pair(sa[right--], pb[i].second) );
}
}
sort(pa.begin(), pa.end(), cmp2);
vector<int> ret;
// A.clear();
for (int i = 0; i < A.size(); i++) {
ret.push_back(pa[i].first);
}
return ret;
}
};