ZS_2462_雇佣 K 位工人的总代价
思路#
两个小顶堆借助左右两个指针将数组元素遍历,不断比较两个小顶堆的堆顶元素,累加两者更小的价格(相等优先加左边的);
为保证candidates满足条件,先进行candidates次;
最后得出总价格;
优先队列#
优先队列的本质是数据结构中的树,Java中的Queue接口用PriorityQueue实现类实现,可创建默认的小顶堆。
具体实现:

代码#
public static long totalCost(int[] costs, int k, int candidates) { Queue<Integer> leftQueue = new PriorityQueue<>(); Queue<Integer> rightQueue = new PriorityQueue<>(); int len = costs.length; long total = 0L; int leftP = 0, rightP = len - 1; for (int i = 0; i < candidates; i++) { if (leftP <= rightP) leftQueue.offer(costs[leftP++]); if (leftP <= rightP) rightQueue.offer(costs[rightP--]); } while (k != 0) { int minL = leftQueue.peek() == null ? Integer.MAX_VALUE : leftQueue.peek(); int minR = rightQueue.peek() == null ? Integer.MAX_VALUE : rightQueue.peek(); if (minL <= minR) { leftQueue.poll(); total += minL; if (leftP <= rightP) leftQueue.offer(costs[leftP++]); } else { rightQueue.poll(); total += minR; if (leftP <= rightP) rightQueue.offer(costs[rightP--]); } k--; } return total; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通