面试必考精华版Leetcode2462. 雇佣 K 位工人的总代价

本文介绍了一段C++代码,通过优先队列实现计算在给定成本向量中,满足特定条件下的最小总成本。算法涉及到两个优先队列,分别从两端处理,直至满足k次操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:


代码(首刷看解析):

class Solution {
public:
    long long totalCost(vector<int>& costs, int k, int candidates) {
        // 优先队列,升序
        priority_queue<int, vector<int>, greater<int>> frontQue;
        priority_queue<int, vector<int>, greater<int>> backQue;
        int n = costs.size();
        for(int i=0;i<candidates;++i) frontQue.push(costs[i]);
        for(int i=n-1;i>=n-candidates&&i>=candidates;--i) backQue.push(costs[i]);//保证n-canditates不是负数
        int lcursor=candidates,rcursor=n-candidates-1;
        long long sum = 0;
        while(k){
            long long lMin=INT_MAX,rMin=INT_MAX;
            if(!frontQue.empty()) lMin = frontQue.top();
            if(!backQue.empty()) rMin = backQue.top();
            if(lMin<=rMin){
                frontQue.pop();
                if(lcursor<=rcursor) frontQue.push(costs[lcursor++]);
                sum+=lMin;
            }else{
                backQue.pop();
                if(rcursor>=lcursor) backQue.push(costs[rcursor--]);
                sum+=rMin;
            }
            k--;
        }
        return sum;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值