Problem: 826. 安排工作以达到最大收益
服了又是没有仔细看题,,,注释掉的部分是用双指针实现了一个完成工作量最大的算法
Code
class Solution {
public:
// static bool cmp(pair<int, int> & a, pair<int, int> &b) {
// if(a.first == b.first) return a.second > b.second;
// else return a.first < b.first;
// }
int maxProfitAssignment(vector<int>& difficulty, vector<int>& profit, vector<int>& worker) {
vector<pair<int, int>> kv;
int n = difficulty.size();
for(int i = 0; i < n;i ++) {
kv.push_back(make_pair(difficulty[i], profit[i]));
}
// sort(kv.begin(), kv.end(), cmp);
// sort(worker.begin(), worker.end(), greater<int>());
int l = worker.size();
// 双指针
int res = 0;
// for(int j = kv.size() - 1, i = 0; j >= 0 && i < l; ) {
// if(kv[j].first <= worker[i]) {
// res += kv[j].second;
// cout << worker[i] << " " << kv[j].first << " " << kv[j].second << endl;
// i ++;
// // continue;
// }
// else {
// cout << worker[i] << endl;
// j --;
// cout << j << endl;
// }
// }
for(int i = 0; i < l ; i ++) {
int mx = 0;
for(int j = 0 ; j < kv.size(); j ++) {
if(kv[j].first <= worker[i]) mx = max(mx, kv[j].second);
}
res += mx;
}
return res;
}
};