当前位置: 首页 > news >正文

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

求解思路

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

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

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

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

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

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

代码实现

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 艘。

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


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

http://www.gsyq.cn/news/112512.html

相关文章:

  • 二维码QRCode的属性
  • 以太网编码技术
  • MeshLab文件格式完全指南:从入门到精通的实用技巧
  • 1.15 并行编程
  • Unreal Engine文档查询太难?LobeChat快速定位
  • 01. 内存对齐
  • LobeChat支持Markdown输出吗?代码展示效果实测
  • 15min的博客—回归的学习方法
  • vue3中watch和watchEffect的区别
  • LobeChat睡眠改善建议生成模型训练
  • 【小迪安全2023】day23 PHP应用后台模块SessionCookietoken身份验证唯一性
  • 【文献分享】RAMEN:剖析脐带血中 DNA 甲基化组差异的个体、累加及交互基因-环境因素作用
  • Podcast Bulk Downloader:让你的播客收藏管理更高效
  • 节能商业照明:核心优势、关键要素及光学性能分析
  • 双十一手机选购指南:剖析几款旗舰机型的影像技术突破
  • LobeChat日志追踪与调试技巧:快速定位异常请求
  • DAY38模型可视化与推理
  • LobeChat代码注释自动生成实践
  • Radm1n1ster Adv.Math thinking class chapter6
  • Copilot的Plan模式到底好在哪?
  • 深入探索 WebHID:Web 标准下的硬件交互实现
  • 合同条款审查:LobeChat标记潜在风险点
  • 脱口秀段子生成:LobeChat玩转中文谐音梗
  • WordPress跨平台兼容OA系统word上传需求
  • LobeChat待办事项提取与提醒功能实现
  • 真正厉害的销售,都摸透了人性!
  • FEMM软件下载与安装
  • NPP 热带森林:墨西哥查梅拉,1982-1995 年,R1
  • Xbox 360手柄在macOS上的终极适配指南:360Controller驱动完美解决方案
  • WordPress导入MathType公式保留矢量格式