標籤:make 用法 結果 solution count mat color amp 優勢
刷leecode有這麼一道題:
給定兩個大小相等的數組 A 和 B,A 相對於 B 的優勢可以用滿足 A[i] > B[i] 的索引 i 的數目來描述。
返回 A 的任意排列,使其相對於 B 的優勢最大化。
我第一次想的是枚舉法,然後逾時了。
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 6b_matrix[j]:0 2 2 4 56取代5原先的索引, 4取代2原先的索引,2取代0原來的索引值。其他位置則隨意****************/
C++ pair用法