雇佣 K 位工人的总代价

题目链接

雇佣 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) {// 左侧下标为0queue.offer(new int[]{costs[left], 0});left++;}if (left <= right) {// 右侧下标为1queue.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.mzph.cn/bicheng/11921.shtml

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

相关文章

IOS 苹果IAP(内购)之创建沙盒账号

IOS 苹果IAP&#xff08;内购&#xff09;之创建沙盒账号 沙盒账号是什么&#xff1f;沙盒账号创建的前提条件沙盒账号创建沙盒账号使用流程沙盒账号注意事项 沙盒账号是什么&#xff1f; 如果IOS应用里面用到了苹果应用内付费&#xff08;IAP&#xff09;功能&#xff0c;那么…

第6章 Elasticsearch,分布式搜索引擎【仿牛客网社区论坛项目】

第6章 Elasticsearch&#xff0c;分布式搜索引擎【仿牛客网社区论坛项目】 前言推荐项目总结第6章 Elasticsearch&#xff0c;分布式搜索引擎1.Elasticsearch入门2.Spring整合ElasticsearchDiscussPostRepositoryDiscussPostControllerEventConsumer 3.开发社区搜索功能 最后 前…

上位机图像处理和嵌入式模块部署(树莓派4b的替代品)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 实话实说&#xff0c;树莓派4b的产品力还是比较优秀的&#xff0c;价格还算适中。但是和国产卡片电脑比起来&#xff0c;则逊色不少。功能差不多的…

第四篇 Asciidoc - MindMap 思维导图 不是事

MindMap 是一种对思维的简单抽象,说到底,就是一个树状结构。 以下是一个样例: Figure 1. MindMap示例 我们的目录结构、模块结构、分类结构等等,都是树型结构,它非常普遍,因此 MindMap 是笔记软件中,获得最多支持的一种图。 精确地说,这类图,是对思维结构的一种映射…

BES 平台 SDK之 美格信Dongle 连接

前言: 最近项目到了试产阶段,需要用到美格信的Dongel 来测试ANC 相关功能。在此简单介绍下如何连接Dongel 的操作步骤。 一:硬件材料清单 1.美格信dongle 一台 2.待测机器 二:软件工具 1.BES_Designer_Tool_v1.0.782 2.美格信驱动安装包 :libusb-win32-devel-filter-1.2…

Polynomial Round 2022 C. Ice and Fire (构造)

小 09 和他的朋友们正在玩游戏。共有 n 名玩家&#xff0c;玩家 i 的温度值是 i 。 环境类型表示为 0 或 1 。当两个棋手在一个特定的环境中对战时&#xff0c;如果环境的类型是 0 &#xff0c;那么在这个环境中温度值较低的棋手总是获胜&#xff1b;如果环境的类型是 1 &#…

【Ubuntu系统hgfs共享文件夹不显示问题解决】

问题描述&#xff1a;为了实现本地物理机与虚拟机之间的文件传输&#xff0c;我们通常采用共享文件夹的方式。但是在Vmware虚拟机使用Ubuntu系统的过程中&#xff0c;由于某种特殊或意外原因&#xff0c;Ubuntu系统或发生/mnt/hgfs共享文件夹丢失不显示的问题。以下是本次问题发…

C语言易错提醒选择题精选

Ⅰ 易错题 1.设有double p;&#xff0c;为变量p声明一个引用名称rp,则定义语句为 double& rpp; 2.已知‘A’一‘Z’的ASCII码为65—90&#xff0c;当执行“char ch14*52&#xff1b;cout<<ch<<endl;”语句序列后得到的输出结H &#xff0c;72对应ASCII码中…

免费分享一套SpringBoot+Vue教务管理(课程管理)系统,帅呆了~~

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue教务管理(课程管理)系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue教务管理(课程管理)系统 Java毕业设计_哔哩哔哩_bilibili【免费】SpringBootVue教务管理(课程管理)系统 …

分布式开发

文章目录 分布式开发2024 分布式开发2024 分布式锁&#xff0c;有zk和redis二种实现方式 利用redis有一个框架Redisson 来实现 分布式事务的解决方案 分布式事务详解-Seata 通过springCloud的组件Seata来解决&#xff0c;这个是分布式项目问题解决框架通过自己来实现&#xff…

Python sqlite3库 实现 数据库基础及应用-数据维护:请编写一个具有新增和查询两种功能的程序

目录 【第12次课】实验十数据库基础及应用2-数据维护 程序代码&#xff1a; 程序运行举例: 【第12次课】实验十数据库基础及应用2-数据维护 数据库文件有两张表&#xff0c;其中“成绩表”有三个字段:学号、课程名、成绩。请编写一个具有 新增和查询两种功能的程序: (1)当输…

品鉴中的盲品挑战:如何凭借感官判断红酒的类型与品质

盲品挑战是一种品鉴方式&#xff0c;通过蒙住品鉴者的眼睛&#xff0c;仅凭感官来判断红酒的类型和品质。这种方式考验品鉴者的感官敏锐度和经验&#xff0c;也是提升品鉴能力的一种有趣方式。那么&#xff0c;如何在盲品挑战中凭借感官判断雷盛红酒的类型与品质呢&#xff1f;…

经典查找算法

1.顺序查找法 从序列的一端到另一端&#xff0c;找到元素返回对应下标&#xff0c;退出循环。 可能找的到&#xff0c;也可能找不到。 时间复杂度O(n) int find(vector <int>nums, int target) {for(int i0; i<nums.size(); i){if(nums[i]target) return i; }return…

Web APIs(获取元素+操作元素+节点操作)

目录 1.API 和 Web API 2.DOM导读 DOM树 3.获取元素 getElementById获取元素 getElementsByTagName获取元素 H5新增方法获取 获取特殊元素 4.事件基础 执行事件 操作元素 修改表单属性 修改样式属性 使用className修改样式属性 获取属性的值 设置属性的值 移除…

Git系列:git show 使用技巧

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

Visual Studio使用——vs解决方案显示所有文件

目录 引出vs解决方案显示所有文件Idea安装和使用0.Java下载 和 IDEA工具1.首次新建项目2.隐藏文件不必要显示文件3.目录层级设置4.Settings设置选择idea的场景提示代码不区分大小写 取消git的代码作者显示 总结 引出 Visual Studio使用——自定义代码片段 & 像使用IDEA一样…

台式电脑屏幕亮度怎么调节?让你的眼睛更舒适!

在日常使用台式电脑时&#xff0c;调节屏幕亮度是一项常见的需求。不同的环境和个人偏好可能需要不同的亮度设置。因此&#xff0c;了解台式电脑屏幕亮度怎么调节是非常重要的。本文将介绍三种常见的方法&#xff0c;帮助您轻松调节台式电脑屏幕亮度&#xff0c;以满足您的需求…

asp.net core mvc razor动态编译

开发mvc过程中razor页面需要重启才能编译&#xff0c;非常麻烦&#xff0c;能否实现动态编译&#xff0c;微软官方提供了一个包能实现 新建.net 6 mvc项目 安装Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 修改csproj <Project Sdk"Microsoft.NET.Sdk.Web…

目标检测——YOLOv9算法解读

论文&#xff1a;YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information (2024.2.21) 作者&#xff1a;Chien-Yao Wang, I-Hau Yeh, Hong-Yuan Mark Liao 链接&#xff1a;https://arxiv.org/abs/2402.13616 代码&#xff1a;https://github.com/W…

【微信小程序开发】深入探索事件绑定、事件冒泡、页面跳转的逻辑实现

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…