C++ pair用法

匿名 (未验证) 提交于 2019-12-03 00:41:02

刷leecode有这么一道题:

AB,A 相对于 B 的优势A[i] > B[i]i

AB

我第一次想的是枚举法,然后超时了。

class Solution { public:     vector<int> advantageCount(vector<int>& A, vector<int>& B) {         int max = 0;         vector<int> maxVector;         maxVector.insert(maxVector.begin(), A.begin(), A.end());         sort(A.begin(), A.end());         do         {             int count = 0;             for(int i = 0; i < A.size(); i ++)             {                 if(A[i] > B[i] ) count++;             }             if(count > max)             {                 max = count;                 maxVector.clear();                 maxVector.insert(maxVector.begin(), A.begin(), A.end());                         }         } while(next_permutation(A.begin(), A.end()));         return maxVector;     } };

1.首先两个数组进行排序,如果数组A[i] > B[j];,用pair存储B数组未排序的索引 可以认为B[j]之前的索引数组都是小于等于A[i].

2. 则对数组A遍历,找到满足A[i]>B[j]的值,取代结果数组B中原先索引值。

代码如下:

class Solution { public:     vector<int> advantageCount(vector<int>& A, vector<int>& B) {         vector<pair<int, int> > b_matrix;         vector<int> result;  //存储结果索引值         result.resize(B.size());         int flag = -1;         for(int i = 0; i < B.size(); i++)         {             b_matrix.push_back(make_pair(B[i],i));         }         sort(A.begin(), A.end());         sort(b_matrix.begin(), b_matrix.end());         int j = A.size()-1;         int k = A.size()-1;         int i = 0;         while(j>=0)         {             if(A[k] > b_matrix[j].first) {                 result[b_matrix[j].second] = A[k];                 k--;                 j--;             } else {                 result[b_matrix[j].second] = A[i];                 i++;                 j--;             }                      }                   return result;     } }; /*********example ******  A[k]:          1 2  2 4 6 b_matrix[j]:0 2 2 4 5 6取代5原先的索引,   4取代2原先的索引, 2取代0原来的索引值。 其他位置则随意 ****************/

原文:https://www.cnblogs.com/Shinered/p/9313954.html

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!