第 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)相关推荐

  1. Leetcode 881:救生艇问题

    Leetcode 881: 救生艇问题 问题描述: 现在有NNN位乘客被困在一艘即将坠海的遇难船上,其中第iii个乘客的体重记为people[i]. 每艘救生艇能够承载的最大体重为limit. 注意: ...

  2. 《Java程序设计》第十一周学习总结

    20175334 <Java程序设计>第十一周学习总结 教材学习内容总结 第十三章 URL类 一个URL对象通常包含最基本的三部分信息:协议.地址.资源. URL对象调用 InputStr ...

  3. 20175320 2018-2019-2 《Java程序设计》第2周学习总结

    20175320 2018-2019-2 <Java程序设计>第2周学习总结 教材学习内容总结 本周学习了教材的第二章及第三章的内容.在这两章中介绍了Java编程中的基本数据类型与数组以及 ...

  4. 20145101《Java程序设计》第4周学习总结

    20145101<Java程序设计>第4周学习总结 教材学习内容总结 第六章 继承与多态 继承:避免多个类间重复定义共同行为. 把相同代码提升为父类 运用extends关键字的子类会继承扩 ...

  5. java程序设计_Java程序设计:学习笔记(4-5)(未完工)

    声明: 本文内容基于"吉首大学软件学院-Java程序设计(Java面向对象程序设计)"网课与个人实践经验修改编写而成.本文属于Arcadia项目组成部分.若有错误或不足之处存在请联 ...

  6. 20155307 2016-2017-2 《Java程序设计》第10周学习总结

    20155307 2016-2017-2 <Java程序设计>第10周学习总结 教材学习内容总结 网络编程:就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据 ...

  7. 20155204 2016-2017-2 《Java程序设计》第3周学习总结

    20155204 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 一个原始码中可以有多个类定义,但只能有一个公开类. 留心Scanner对于每一种类型的nex ...

  8. java课设推荐,《Java程序设计》课程设计报告推荐.docx

    <Java程序设计>课程设计报告推荐 <Java程序设计>课程设计报告2015-2016学年 第一学期设计题目整数进制转换学生姓名邹晓刚学 号0专业班级信管1303指导教师 姜 ...

  9. 计算机浙大网java网站,网络课程—非计算机专业JAVA程序设计语言

    <非计算机专业JAVA程序设计语言> 一.主要目标和主要内容: 该课程面向全校非计算机专业理工类本科生,是程序设计语言类必修的公共基础课之一.该课程的前导课程是<大学计算机基础> ...

  10. Java程序设计经典习题15道

    Java程序设计总复习题 1.编写一个Java程序在屏幕上输出"你好!".(p13,例1-1) //programme name Helloworld.java public cl ...

最新文章

  1. demo flink写入kafka_Flink结合Kafka实时写入Iceberg实践笔记
  2. Linux重定向指令
  3. java 流拆分_java - 在Java流中拆分字符串? - SO中文参考 - www.soinside.com
  4. 5月份 Github 上最热的十个 Python 项目,从Debug工具到AI水军、量化交易系统。
  5. 远程过程调用RPC RMI(Remote Method Invocation)和Web Service
  6. 16.IDA-列出函数中存在的全部call(函数调用窗口,查看函数内调用了哪些call)
  7. 鸿蒙系统 闹钟,华为鸿蒙2.0操作系统正式版
  8. 剑指offer:滑动窗口的最大值(栈和队列)
  9. linux ip协议号,IP协议号大全
  10. React学习笔记二 通过柯里化函数实现带参数的事件绑定
  11. 借助Keras来了解Python中的状态LSTM递归神经网络
  12. 自建网盘教程之:使用可道云搭建私有云网盘,无需数据库
  13. 美团外卖与饿了么竞品分析
  14. 16年“折腾史” | 盘点联想手机成与败
  15. mysql制空快捷键_mysql数据库常用操作
  16. 硬核实测 | 深信服超融合承载Oracle,重载虚拟机热迁移居然这么平滑
  17. 微信登录设备android22,安卓微信 7.0.22 内测版发布,支持手机和平板同时登录
  18. CSS flex 排版与动画 — 重学 CSS「1024 彩蛋」
  19. 公司局域网控制电脑开机与关机 不用购买第三方开机设备 远程办公必备
  20. “回车”(Carriage Return)和“换行”(Line Feed)

热门文章

  1. android---Apktool解压apk
  2. 《STM32学习笔记》4——核心功能电路与编程(下)
  3. STM32应用开发实践教程:基于 RS-485 总线的多机通信应用开发
  4. 6-8.4V自动升降压5V 9V 12V PD快充解决方案 TYPE-C快充
  5. PHP常用的文件操作函数集锦
  6. 鼠标指针(光标)变成黑方块的解决方法
  7. Excel将多个单元格内容整理到1个单元的2种方法
  8. 台湾最大IC封装厂近三成员工停工14天,安世半导体宣布今日起调涨价格!
  9. 希尔伯特的23个数学问题
  10. 2023西安交通大学计算机考研信息汇总