刷题,遇见救生艇问题,题目如下:

第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit。

每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。

返回载到每一个人所需的最小船数。(保证每个人都能被船载)。

初始打算用暴力解法,用遍历相加的方法,但是提交超时。优化后,换贪心算法可以通过。

整体思路为:先排序,然后首尾相加(即最重的和最轻的)和limit 比较,若小于或等于limit,则两人可共乘一船。如果大于limit,则最重的人需要独自乘坐一船,且次重者和最轻者相加,继续比较。直到无人剩下或只剩一人为止。

代码如下:

class Solution:def numRescueBoats(self, people: List[int], limit: int) -> int:res = 0people.sort()#设置左右指针l,r = 0, len(people) - 1while l <= r:if l == r:res += 1breakif people[l] + people[r] <= limit:l += 1r -= 1res += 1if people[l] + people[r] > limit:r -= 1res += 1return res

贪心算法百科解释是一种对某些求最优解问题的更简单、更迅速的设计技术。

贪心算法的特点是一步一步地进行,常以当前情况为基础根据某个优化测度作最优选择,而不考虑各种可能的整体情况,省去了为找最优解要穷尽所有可能而必须耗费的大量时间。

贪心算法采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择,就将所求问题简化为一个规模更小的子问题,通过每一步贪心选择,可得到问题的一个最优解。虽然每一步上都要保证能获得局部最优解,但由此产生的全局解有时不一定是最优的,所以贪心算法不要回溯。

leetcode 881 救生艇 (python3- 贪心算法)相关推荐

  1. LeetCode 881. 救生艇(贪心,双指针)

    1. 题目 第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit. 每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit. 返回载到每一个人所需的最小船数.( ...

  2. Leetcode 881:救生艇问题

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

  3. LeetCode 881.救生艇

    https://leetcode.cn/problems/boats-to-save-people 给定数组 people .people[i]表示第 i 个人的体重 ,船的数量不限,每艘船可以承载的 ...

  4. Leetcode刷题:贪心算法

    文章目录 一.算法思想 二.分配问题 2.1 Leetcode 455 2.1.1 题目描述 2.1.2 输入输出格式 2.1.3求解思路 2.1.4 代码示例(C++) 2.2 Leetcode 1 ...

  5. 力扣881. 救生艇(贪心,双指针)

    881. 救生艇 题目描述: 第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit. 每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit. 返回载到每一个人 ...

  6. LeetCode 题解随笔:贪心算法

    目录 零.前言 一.简单问题 455. 分发饼干 1005. K 次取反后最大化的数组和 860. 柠檬水找零 二.序列问题 376. 摆动序列[*] 738. 单调递增的数字 53. 最大子数组和[ ...

  7. LeetCode 881. 救生艇

    Description 第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit. 每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit. 返回载到每一个人所需的 ...

  8. leetcode刷题:贪心算法08(加油站)

    134. 加油站 力扣题目链接 在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升. 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 co ...

  9. 170. Leetcode 135. 分发糖果 (贪心算法-两个维度权衡题目)

    这道题目一定是要确定一边之后,再确定另一边,例如比较每一个孩子的左边,然后再比较右 边,如果两边一起考虑一定会顾此失彼. 先确定右边评分大于左边的情况(也就是从前向后遍历) 此时局部最优:只要右边评分 ...

最新文章

  1. ORB-SLAM3系列-多地图管理
  2. 业界干货 | 图解自监督学习,从入门到专家必读的九篇论文
  3. 【LeetCode】最大子序和
  4. 批处理相对路径51CTO自动领豆(Python)
  5. boost::enable_current_exception用法测试程序
  6. 多态部分作业 2.编写2个接口:InterfaceA和InterfaceB;在接口InterfaceA中有个方法void 输出大小写字母表
  7. Git之深入解析如何将项目迁移到Git
  8. RocketMQ简介、环境搭建
  9. Android系统兼容性问题(持续更新)
  10. 依赖注入(Dependency Injection)框架是如何实现的?
  11. linux 解压安卓内核,解压内核镜像
  12. day09面向对象+
  13. c++ 一个h文件里面定义一个主类,然后定义多个子类
  14. 分享一个外泌体数据库
  15. 在线 LaTeX 公式编辑器
  16. redis 附近的人_Redis怎么实现查找附近的人,请看特殊数据类型Geospatial
  17. 2023mac电脑系统第三方清理软件CleanMyMacX
  18. 公司官网建站笔记(五):域名工信部备案完整流程并解析公网访问
  19. 网络安全实验室|网络信息安全攻防学习平台(基础关)
  20. 数论——佩尔方程变量分解

热门文章

  1. tcl/tk 的安装
  2. 数聚生态,智驭全界!看天翼云如何为智慧园区注入新动能!
  3. ue4网格转地形_UE4 山脉风景地形模型
  4. Word中如何删除目录页的页码
  5. 基于单片机的温湿度监测系统设计(程序)
  6. C#保留2位小数几种场景总结 游标遍历所有数据库循环执行修改数据库的sql命令 原生js轮盘抽奖实例分析(幸运大转盘抽奖) javascript中的typeof和类型判断...
  7. php文字转语音amr,如何将文字转成语音?这几个方法一分钟搞定!
  8. Windows硬盘坏道修复
  9. 电容笔有什么用?适合iPad画画的电容笔推荐
  10. Java base64转化成 inputStream