雇佣 K 位工人的总代价

news2025/1/23 9:26:22

题目链接

雇佣 K 位工人的总代价

题目描述


注意点

  • costs[i]是雇佣第 i 位工人的代价
  • 每一轮雇佣后,剩余工人的下标可能会发生变化
  • 一位工人只能被选择一次
  • 如果剩余员工数目不足 candidates 人,那么下一轮雇佣他们中代价最小的一人
  • 如果有多位代价相同且最小的工人,选择下标更小的一位工人

解答思路

  • 因为每一轮需要从最前面 candidates 和最后面 candidates 人中选出代价最小的一位,且某位工人如果已经被雇佣,则需要从可选择的工人中剔除掉,所以考虑使用优先队列PriorityQueue存储每一轮前candidates和后candidates位工人,队顶存储的是代价最小的工人。又因为如果有多位代价相同且最小的工人,选择下标更小的一位工人,所以当PriorityQueue工人代价相同时,则在前面的工人更优先
  • 一位工人只能被选择一次,所以在选择了队顶的工人后,需要将其从队列中弹出,再弹出工人位于前面还是后面选择从前面或后面再添加一位工人到队列中(没有多余的工人则不添加)

代码

class Solution {
    public long totalCost(int[] costs, int k, int candidates) {
        long res = 0L;
        int n = costs.length;
        // 堆顶的代价更小,如果代价相同则下标更小
        PriorityQueue<int[]> queue = new PriorityQueue<>((int[] x, int[] y) -> {
            if (x[0] == y[0]) {
                return x[1] - y[1];
            }
            return x[0] - y[0];
        });
        int left = 0, right = n - 1;
        for (int i = 0; i < candidates; i++) {
            // 保证元素不会重复加入
            if (left <= right) {
                // 左侧下标为0
                queue.offer(new int[]{costs[left], 0});
                left++;
            }
            if (left <= right) {
                // 右侧下标为1
                queue.offer(new int[]{costs[right], 1});
                right--;
            }
        }
        for (int i = 0; i < k; i++) {
            int[] arr = queue.poll();
            res += arr[0];
            // 员工已全部加入到队列中
            if (left > right) {
                continue;
            }
            if (arr[1] == 0) {
                queue.offer(new int[]{costs[left], 0});
                left++;
            } else {
                queue.offer(new int[]{costs[right], 1});
                right--;
            }
        }
        return res;
    }
}

关键点

  • 优先队列存储前后candidates位工人,队列根据工人代价从小到大进行排序,如果代价相同,则根据其在前面candidates和后面candidates进行排序
  • 需要注意越界问题,也就是剩余工人不足candidates的情况,防止某些工人未添加到优先队列的同时防止某些工人被添加多次到队列中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1673493.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

排序-堆排序(Heap Sort)

堆排序&#xff08;Heap Sort&#xff09;是一种基于比较的排序算法&#xff0c;它利用了完全二叉树的特性&#xff0c;将待排序的序列构造成一个大顶堆&#xff08;每个父节点的值都大于或等于其子节点的值&#xff09;或小顶堆&#xff08;每个父节点的值都小于或等于其子节点…

哪个品牌led灯好?五大好用护眼台灯推荐

哪个品牌led灯好&#xff1f;目前LED护眼台灯当中做得比较好的有明基、松下、书客等品牌。在如今LED灯市场的海洋中&#xff0c;选择一款可靠的护眼台灯变得愈发重要。然而&#xff0c;众多品牌和产品的涌现也让消费者面临着选择困难。为了帮助大家找到最合适的LED台灯&#xf…

【亿事君】1688专业级知识库-阿里巴巴诚信通运营必修课程

01 课程介绍 课程来自亿事君老师的1688专业级知识库/白皮书/全攻略/阿里巴巴诚信通运营必修课程&#xff0c;价值1588元。这是一门系统的学习运营课程&#xff0c;干货满满&#xff0c;诚意十足。主要内容包括&#xff1a;基础、权重、活动玩法、付费流量玩法等&#xff0c;运…

中国196个城市边界

中国196个城市的城市边界形状文件是通过对Li等人&#xff08;2018&#xff09;的输出进行处理和过滤生成的。根据全球人工不可渗透区域 &#xff08;GAIA&#xff09; 数据绘制全球城市边界。 城市建成区边界是城市研究中的一个重要指标&#xff0c;在很多城市研究中都会涉及到…

一键同步用户信息和组织架构,简化用户管理,可道云teamOS插件化集成LDAP/AD的实战应用

随着企业规模的扩大和全球化布局的加深&#xff0c;管理分散在全球各地的员工和用户信息成为了企业IT部门的一大挑战&#xff0c;传统的手动添加用户和管理权限的方式已经无法满足需求。 有没有能自动同步用户信息和组织架构的企业网盘呢&#xff1f; teamOS插件化集成LDAP/AD…

CorelDRAW2024新特性全解析!

CorelDRAW2024是一款备受赞誉的图形设计软件&#xff0c;它以其强大的功能和用户友好性赢得了全球数百万设计师的青睐。该软件提供了丰富的绘图、排版、图像处理、矢量编辑以及网页设计工具&#xff0c;无论是初学者还是专业设计师&#xff0c;都能在这款软件中找到满足自己需求…

升级版ComfyUI InstantID 换脸:FaceDetailer + InstantID + IP-Adapter

在使用ComfyUI的InstantID进行人脸替换时&#xff0c;一个常见问题是该工具倾向于保留原始参考图的构图&#xff0c;即使用户的提示词与之不符。 例如&#xff0c;即使用户提供的是大头照并请求生成全身照&#xff0c;结果仍是大头照&#xff0c;没有显示出用户所期望的构图。…

JavaScript不仅有变量声明,还有变量提升

起因&#xff1a;&#x1f447; 一道面试题 最近&#xff0c;一位朋友参加面试时&#xff0c;遇到了这样一道笔试题&#xff0c;引起了我的兴趣&#xff1a; var foo 1; function fn() {foo 3;return;function foo() {// ...} } fn(); console.log(foo);这个例子中包含了变…

HQChart使用教程98-右键菜单2.0使用介绍

HQChart使用教程98-右键菜单2.0使用介绍 内置右键菜单启用右键菜单定制右键菜单内容1. 注册内置右键菜单创建回调事件2. 修改内置菜单的显示内容回调函数格式菜单数据结构示例 3. 注册菜单项点击事件回调 右键事件完整示例HQChart代码地址 内置右键菜单 HQChart h5版本内置提供…

Python-VBA函数之旅-tuple函数

目录 一、tuple函数的常见应用场景 二、tuple函数使用注意事项 三、如何用好tuple函数&#xff1f; 1、tuple函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a; https://myelsa1024.blog.csdn.net/ 一、tu…

U盘打不开提示格式化怎么办?(含数据恢复及U盘修复教程)

引言&#xff1a; 随着数字化时代的发展&#xff0c;U盘已成为我们日常生活和工作中不可或缺的数据存储工具。然而&#xff0c;有时我们可能会遇到U盘突然无法打开&#xff0c;并提示需要格式化的问题。这不仅会打乱我们的工作节奏&#xff0c;还可能会导致重要数据丢失。本文…

环保访谈|聚英环保:以创新科技引领工业环保

近期&#xff0c;中联环保圈希姐对浙江聚英环保科技有限公司负责人王江进行了专访&#xff0c;就公司的发展、核心产品以及合作客户等方面进行了深入交流。 浙江聚英环保科技有限公司成立于2012年&#xff0c;总占地面积超过3万平方米&#xff0c;拥有标准化的生产车间和先进的…

KNIME 报告扩展

文档对应的 KNIME AP 版本为 5.2 介绍 本指南介绍了 KNIME 报告扩展&#xff0c;并展示了如何创建简单和高级报告。 本指南更新于 2024/05/13&#xff0c;最新版请访问指北君网站 https://havef.fun/knime-cn/knime-doc/ KNIME 报告扩展允许您根据工作流程的结果创建静态报告。…

win10安装mysql8.0+汉化

一、官网安装 MySQL 1. 在mysql官网进行下载页面 2. 下滑页面&#xff0c;选择 MySQL community download 3.下载windows版本 4.选择第二个download 5.不用登陆&#xff0c;no thanks&#xff0c;just start my download. 6.下载 二、安装 1. 双击安装 2. 选 Full->next 3…

react Effect副作用 - 避免滥用Effect

react Effect副作用 - 避免滥用Effect react Effect副作用基础概率什么是纯函数? 什么是副作用函数?纯函数副作用函数 什么时候使用Effect如何使用Effect 避免滥用Effect根据 props 或 state 来更新 state当 props 变化时重置所有 state将数据传递给父组件获取异步数据 react…

​民兵档案管理系统-退伍军人档案管理全流程追踪

民兵档案管理系统-退伍军人档案管理全流程追踪 民兵档案管理系统&#xff08;智档案DW-S403&#xff09;是依托互3D技术、云计算、大数据、RFID技术、数据库技术、AI、视频分析技术对RFID智能仓库进行统一管理、分析的信息化、智能化、规范化的系统。 RFID档案管理系统是以先进…

代码随想录——N叉树的层序遍历(Leetcode429)

题目链接 层序遍历 /* // Definition for a Node. class Node {public int val;public List<Node> children;public Node() {}public Node(int _val) {val _val;}public Node(int _val, List<Node> _children) {val _val;children _children;} }; */class Sol…

硬件FMEA与软件FMEA的区别——FMEA软件

​免费试用FMEA软件-免费版-SunFMEA 在产品开发和制造过程中&#xff0c;失效模式与影响分析&#xff08;FMEA&#xff09;作为一种预防性的质量工具&#xff0c;对于确保产品性能和质量至关重要。然而&#xff0c;硬件FMEA和软件FMEA在应用和实践方面存在显著的区别。本文旨在…

Excel 根据包含的关键词将指定列按关键词指定顺序排列

例题描述和简单分析 有 Excel 文件&#xff0c;数据如下所示&#xff1a; AB1Parent ColumnModifier (Column)2Jack lives in the villageRose3As mentioned by jackVillage4Rose already spoke to jack about last nightJack5Rose left the village6rose was their yesterda…

uboot 顶层 Makefile 逐行分析

文章目录 0001-00080009-00180019-00510052-00920093-01070108-01230124-01770178-23150178-01810182-01860187-02020203-02450246-02620263-02720273-03370338-03830384-03870388-04250426-04490450-04740475-04860487-04980499-05340535-05500551-05650566-221822192220-2332…