JAVA程序设计:救生艇(LeetCode:881)
第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit。
每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。
返回载到每一个人所需的最小船数。(保证每个人都能被船载)。
示例 1:
输入:people = [1,2], limit = 3
输出:1
解释:1 艘船载 (1, 2)
示例 2:
输入:people = [3,2,2,1], limit = 3
输出:3
解释:3 艘船分别载 (1, 2), (2) 和 (3)
示例 3:
输入:people = [3,5,3,4], limit = 5
输出:4
解释:4 艘船分别载 (3), (3), (4), (5)
提示:
1 <= people.length <= 50000
1 <= people[i] <= limit <= 30000
思路:我们考虑从体重最大的人开始装船,为了尽可能的少用船,我们一定是让每艘船多出来的空间尽可能的小,也就是说对于当前体重的人来说,我们一定是找一个和他体重加在一起总体重不超过limit的尽可能重的人装在一起。
首先对数组进行排序(因为我们要从最重的人开始遍历),然后维护一个优先队列表示当前有些船已经有人了(还差一个人),这个优先队列一定是升序的队列(读者可以自己思考下为什么不能降序?),每次若队头和当前要装船的人体重总和不超过limit,则将该人和队头的人一起装船。否则另开新船。
class Solution {public int numRescueBoats(int[] people, int limit) {int n=people.length,ans=0;PriorityQueue<Integer> q=new PriorityQueue<>();Arrays.parallelSort(people);for(int i=n-1;i>=0;i--) {if(!q.isEmpty() && people[i]+q.peek()<=limit) {q.poll();ans++;}else q.add(people[i]);}return ans+q.size();}
}
JAVA程序设计:救生艇(LeetCode:881)相关推荐
- Leetcode 881:救生艇问题
Leetcode 881: 救生艇问题 问题描述: 现在有NNN位乘客被困在一艘即将坠海的遇难船上,其中第iii个乘客的体重记为people[i]. 每艘救生艇能够承载的最大体重为limit. 注意: ...
- 《Java程序设计》第十一周学习总结
20175334 <Java程序设计>第十一周学习总结 教材学习内容总结 第十三章 URL类 一个URL对象通常包含最基本的三部分信息:协议.地址.资源. URL对象调用 InputStr ...
- 20175320 2018-2019-2 《Java程序设计》第2周学习总结
20175320 2018-2019-2 <Java程序设计>第2周学习总结 教材学习内容总结 本周学习了教材的第二章及第三章的内容.在这两章中介绍了Java编程中的基本数据类型与数组以及 ...
- 20145101《Java程序设计》第4周学习总结
20145101<Java程序设计>第4周学习总结 教材学习内容总结 第六章 继承与多态 继承:避免多个类间重复定义共同行为. 把相同代码提升为父类 运用extends关键字的子类会继承扩 ...
- java程序设计_Java程序设计:学习笔记(4-5)(未完工)
声明: 本文内容基于"吉首大学软件学院-Java程序设计(Java面向对象程序设计)"网课与个人实践经验修改编写而成.本文属于Arcadia项目组成部分.若有错误或不足之处存在请联 ...
- 20155307 2016-2017-2 《Java程序设计》第10周学习总结
20155307 2016-2017-2 <Java程序设计>第10周学习总结 教材学习内容总结 网络编程:就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据 ...
- 20155204 2016-2017-2 《Java程序设计》第3周学习总结
20155204 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 一个原始码中可以有多个类定义,但只能有一个公开类. 留心Scanner对于每一种类型的nex ...
- java课设推荐,《Java程序设计》课程设计报告推荐.docx
<Java程序设计>课程设计报告推荐 <Java程序设计>课程设计报告2015-2016学年 第一学期设计题目整数进制转换学生姓名邹晓刚学 号0专业班级信管1303指导教师 姜 ...
- 计算机浙大网java网站,网络课程—非计算机专业JAVA程序设计语言
<非计算机专业JAVA程序设计语言> 一.主要目标和主要内容: 该课程面向全校非计算机专业理工类本科生,是程序设计语言类必修的公共基础课之一.该课程的前导课程是<大学计算机基础> ...
- Java程序设计经典习题15道
Java程序设计总复习题 1.编写一个Java程序在屏幕上输出"你好!".(p13,例1-1) //programme name Helloworld.java public cl ...
最新文章
- demo flink写入kafka_Flink结合Kafka实时写入Iceberg实践笔记
- Linux重定向指令
- java 流拆分_java - 在Java流中拆分字符串? - SO中文参考 - www.soinside.com
- 5月份 Github 上最热的十个 Python 项目,从Debug工具到AI水军、量化交易系统。
- 远程过程调用RPC RMI(Remote Method Invocation)和Web Service
- 16.IDA-列出函数中存在的全部call(函数调用窗口,查看函数内调用了哪些call)
- 鸿蒙系统 闹钟,华为鸿蒙2.0操作系统正式版
- 剑指offer:滑动窗口的最大值(栈和队列)
- linux ip协议号,IP协议号大全
- React学习笔记二 通过柯里化函数实现带参数的事件绑定
- 借助Keras来了解Python中的状态LSTM递归神经网络
- 自建网盘教程之:使用可道云搭建私有云网盘,无需数据库
- 美团外卖与饿了么竞品分析
- 16年“折腾史” | 盘点联想手机成与败
- mysql制空快捷键_mysql数据库常用操作
- 硬核实测 | 深信服超融合承载Oracle,重载虚拟机热迁移居然这么平滑
- 微信登录设备android22,安卓微信 7.0.22 内测版发布,支持手机和平板同时登录
- CSS flex 排版与动画 — 重学 CSS「1024 彩蛋」
- 公司局域网控制电脑开机与关机 不用购买第三方开机设备 远程办公必备
- “回车”(Carriage Return)和“换行”(Line Feed)