在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
刷leecode有这么一道题: 给定两个大小相等的数组 返回 我第一次想的是枚举法,然后超时了。 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原来的索引值。 其他位置则随意 ****************/
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论