雇佣 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;那么…

上位机图像处理和嵌入式模块部署(树莓派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…

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教务管理(课程管理)系统 …

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

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

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;…

每日一题11:Pandas:数据重塑-透视

一、每日一题 解答&#xff1a; import pandas as pddef pivotTable(weather: pd.DataFrame) -> pd.DataFrame:df_pivot weather.pivot(indexmonth, columnscity, valuestemperature)return df_pivot 题源&#xff1a;力扣 二、总结 Pandas 是一个强大的 Python 数据分析…

数据可视化(十):Pandas数据分析师职位信息表分析——箱线图、水平柱状图、学历城市双维分析等高级操作

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

Rpcx (二):传输

一、Transport 传输 rpcx 可以通过 TCP、HTTP、UnixDomain、QUIC和KCP通信。你也可以使用http客户端通过网关或者http调用来访问rpcx服务。 TCP 这是最常用的通信方式。高性能易上手。可以使用TLS加密TCP流量。 Example: 101basic 服务端使用 tcp 做为网络名并且在注册中心…

C++之map和set 的封装

通过红黑树的学习&#xff08;C之红黑树-CSDN博客&#xff09;让我了解到map和set的底层如何实现&#xff0c;这一次我们来对map和set进行封装。 目录 1.map和set底层原理 2.map和set的定义 3.map和set的仿函数 4.map和set的插入 5.map和set的迭代器 5.1迭代器的构造 5.2…

Maven修改本地仓库的默认路径

前言 忽然发现当时下载Maven时候的默认路径没有与Maven放到同一个文件夹内&#xff0c;强迫症的我就想着修改一下Maven的路径&#xff01;也方便后续我的jar包管理&#xff0c;放到C盘下可能会导致占用C盘空间等等问题吧。以下是我的操作过程&#xff1a; 一、创建一个本地仓库…

QX---mini51单片机学习---(6)独立键盘

目录 1键盘简绍 2按键的工作原理 3键盘类型 4独立键盘与矩阵键盘的特点 5本节相关原理图 6按键特性 7实践 1键盘简绍 2按键的工作原理 内部使用轻触按键&#xff0c;常态按下按键触点才闭合 3键盘类型 编码键盘与非编码键盘 4独立键盘与矩阵键盘的特点 5本节相关原理…