【Daily Code】leetcode 826. 安排工作以达到最大收益

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;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值