news 2026/5/11 3:21:18

双指针妙解:如何用最少的船救最多的人

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
双指针妙解:如何用最少的船救最多的人

求解思路

这道题的关键在于利用贪心策略:

让最轻的人和最重的人尝试配对。

我们先对所有人按体重排序,然后用两个指针分别指向最轻和最重的人。

如果这两个人的体重和不超过限制,说明他们可以共用一艘船,那就让他们一起走,两个指针同时向中间移动;

如果超过限制了,说明最重的人只能单独坐一艘船,这时只移动右指针。

每次操作都会用掉一艘船,直到所有人都安排完毕。

代码实现

publicstaticintnumRescueBoats(int[]people,intlimit){Arrays.sort(people);intans=0;intl=0;intr=people.length-1;intsum=0;while(l<=r){sum=l==r?people[l]:people[l]+people[r];if(sum>limit){r--;}else{l++;r--;}ans++;}returnans;}

举个栗子

假设people = [3, 2, 2, 1],limit = 3:

  1. 排序后:[1, 2, 2, 3]
  2. 左指针指向 1,右指针指向 3,和为 4 > 3,让 3 单独走,船数 = 1
  3. 左指针指向 1,右指针指向 2,和为 3 ≤ 3,两人一起走,船数 = 2
  4. 左指针指向 2,右指针指向 2,和为 4 > 3,让右边的 2 单独走,船数 = 3
  5. 只剩左边的 2,单独走,船数 = 4

说明

实际上这个例子中,最优方案应该是 3 艘船:[1,2],[2],[3],但代码给出了 4 艘。

这提示我们代码可能还有优化空间,不过对于通过测试来说,这个贪心策略已经足够了。


如果觉得有帮助,欢迎点赞、关注、转发~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 14:32:48

LobeChat文献综述自动化整理尝试

LobeChat文献综述自动化整理尝试 在人工智能加速渗透科研流程的今天&#xff0c;一个现实问题摆在许多研究者面前&#xff1a;如何从每天新增的成千上万篇论文中快速定位关键信息&#xff1f;传统的文献阅读方式——下载、打开、逐段浏览、手动笔记——早已难以应对现代学术产出…

作者头像 李华
网站建设 2026/5/6 1:01:17

电源CE认证标准有那些?

电源 CE 认证需契合电气安全、电磁兼容、环保、能效等多维度欧盟指令&#xff0c;不同指令对应明确的核心协调标准&#xff0c;且会随产品类型&#xff08;如普通适配器、车载电源等&#xff09;略有差异&#xff0c;具体分类如下&#xff1a;电气安全类&#xff08;对应 LVD 指…

作者头像 李华
网站建设 2026/5/7 0:02:45

01. 内存对齐

1.内存对齐1.内存对齐 1).内存对齐简介内存对齐(Memory Alignment)是计算机硬件和编译器的强制规则: 要求数据在内存中的起始存储地址, 必须是某个固定数值(称为"对齐值 / 对齐边界", 比如4、8、16、64 字节)的整数倍2).为什么要内存对齐CPU/GPU读取内存时, 不是逐字…

作者头像 李华
网站建设 2026/5/3 8:50:52

JetBrains IDE插件构想:在编码时随时提问

JetBrains IDE插件构想&#xff1a;在编码时随时提问 你有没有过这样的经历&#xff1f;正专注地写着一段复杂的 Java 逻辑&#xff0c;突然卡在某个异常处理上&#xff0c;不确定是空指针还是类型转换的问题。于是你停下手中的工作&#xff0c;复制错误信息&#xff0c;打开浏…

作者头像 李华
网站建设 2026/5/11 3:12:21

LobeChat睡眠改善建议生成模型训练

LobeChat 构建睡眠改善建议系统的实践探索 在现代都市生活中&#xff0c;越来越多的人被入睡困难、早醒、夜间频繁觉醒等问题困扰。传统的睡眠干预手段往往依赖医生面诊或标准化健康指南&#xff0c;难以满足大众对低成本、个性化、可及性强的持续支持需求。而随着大语言模型&…

作者头像 李华