力扣每日一题 6/10

881.救生艇[中等]

题目:

给定数组 people 。people[i]表示第 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 <= 5 * 10**4
  • 1 <= people[i] <= limit <= 3 * 10**4

 题目分析:

        一艘船最多上两个人,要使船只最少那就只能让每只船载人尽可能多,那么最多就是两个人,这里对people数组进行排序(假设从小到大排),然后定义双指针分别指头和尾。判断头+尾是否大于limit:

  • 大于的话则说明尾指针指向的最大值只能单独乘船,此时应单独分配一艘船给体重最重的人。从 people中去掉体重最重的人后,我们缩小了问题的规模,变成求解剩余 n−1 个人所需的最小船数,将其加一即为原问题的答案,此时尾指针向前走,船只加一;
  • 否则则说明 头 可以和 尾  一起乘船,那么头也能与其余任何人同乘一艘船,为了尽可能地利用船的承载重量,选择与体重最重的人同乘一艘船是最优的。从 people 中去掉体重最轻和体重最重的人后,就缩小了问题的规模,变成求解剩余 n−2 个人所需的最小船数,将其加一即为原问题的答案。此时头尾都往中间走一步,船只加1。以此类推,遍历一遍过去即可出答案。

代码实现:

class Solution:def numRescueBoats(self, people: List[int], limit: int) -> int:people.sort()n=len(people)if n==1: return 1res=0st,ed=0,n-1while st<=ed:if people[st]+people[ed]<=limit:res+=1st+=1ed-=1else:res+=1ed-=1return res

总结:

       代码的逻辑是基于贪心算法,每次尽可能多地安排乘客乘坐救生艇达到最少的船只数,最后返回res即为所需的最少船只数。具体步骤如下:

  1. 首先对乘客的重量列表进行排序,这样可以从小到大依次选择乘客。
  2. 使用双指针st和ed分别指向排序后的乘客列表的第一个和最后一个元素。
  3. 如果st指向的乘客和ed指向的乘客的重量之和不超过limit,则表示可以安排这两个乘客乘坐一艘救生艇,此时res加1,同时移动st和ed指针继续判断下一组乘客。
  4. 如果st指向的乘客和ed指向的乘客的重量之和超过limit,则只能让ed指向的乘客单独乘坐一艘救生艇,此时res加1,移动ed指针继续判断。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/25544.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LinkedList详解(含数据结构动画演示)

目录 LinkedList详解1、LinkedList的继承体系2、LinkedList的构造函数3、LinkedList的add(E e)方法4、LinkedList的Node节点5、双向链表的概念和Node节点的详细解释6、LinkedList的add(E e)方法梳理7、LinkedList的getXXX方法8、LinkedList的removeXXX方法①、removeFirst()方法…

论述MySQL的同异步复制

MySQL的复制功能是数据库系统中一个重要的特性&#xff0c;它可以实现数据的冗余备份和分布式读写&#xff0c;提高系统的可靠性和性能。MySQL的复制主要分为异步复制、半同步复制和同步复制&#xff0c;这三种复制方式在机制和使用场景上有显著的不同。 异步复制 特点 主从…

如何进行《我的世界》基于Spigot的插件开发

如何进行《我的世界》基于Spigot的插件开发 《我的世界》&#xff08;Minecraft&#xff09;是一款沙盒游戏&#xff0c;允许玩家在一个由方块组成的三维世界中进行探索、建造和冒险。通过使用Spigot服务器&#xff0c;你可以为《我的世界》开发自定义插件&#xff0c;扩展游戏…

python常用命令集

1、pip 命令 正常安装 pip install package_name 更新包 pip install --upgrade package_name 安装指定版本 pip install robotframework2.8.7 查看已安装的库 pip list 2、指定镜像源 手动指定 pip install -i http://pypi.douban.com/simple Flask -- trusted-host …

详解MySQL的MVCC机制与间隙锁

在MySQL的InnoDB存储引擎中&#xff0c;MVCC&#xff08;多版本并发控制&#xff09;和间隙锁&#xff08;Gap Lock&#xff09;是两种关键的并发控制机制。MVCC主要用于提高读写并发性能&#xff0c;而间隙锁则用于实现更严格的事务隔离&#xff0c;防止幻读现象。以下是对MyS…

Linux Kernel入门到精通系列讲解(RV-Kernel 篇) 5.1 从零移植 Linux kernel,基于RISC-V

1. 概述 上一章节我们已经将u-boot部署好了,本章节,我们将从零移植Naruto-Pi的Linux kernel,移植通用RISCV很简单,在移植之前,大家也可以参考我之前写的文章,Linux ARM平台开发系列讲解(QEMU-体验篇) 1.1 编译QEMU 构建RISC-V64架构 运行Linux kernel 2. Linux kernel…

python小tips

函数&#xff1a; 格式&#xff1a; def 函数的名字():函数体例如&#xff1a;def playgame():print("I am playing!")函数调用&#xff1a; playgame()调用的方法&#xff1a; 函数名() 函数的定义只是定义函数&#xff0c;调用了才会有结果 函数的参…

Tomcat源码解析(八):一个请求的执行流程(附Tomcat整体总结)

Tomcat源码系列文章 Tomcat源码解析(一)&#xff1a;Tomcat整体架构 Tomcat源码解析(二)&#xff1a;Bootstrap和Catalina Tomcat源码解析(三)&#xff1a;LifeCycle生命周期管理 Tomcat源码解析(四)&#xff1a;StandardServer和StandardService Tomcat源码解析(五)&…

吴恩达神经网络学习笔记1

代码解释 并不是全部代码&#xff0c;思路的流程 import numpy as np# 如何判断咖啡豆是烤好了 # 假设此神经网络由2层构成###### 这部分代码只是如何建立2层网络&#xff0c; ###### 并不包含如何加载神经网络中的参数 w 和 b######################## 第1层网络# x 是…

浅谈什么是Google GKE?Auto Pilot模式是什么?

一、什么是GKE&#xff1f; 1、他是Google托管的Kubetnetes集群的名称。 2、底层实际还是一堆虚拟机&#xff0c;但这些虚拟机的生命周期不用你负责管理了&#xff0c;只需要管理Gke集群来运行你的工作负载。 1、你需要为这个集群配置Kubetnetes版本、网络、存储、节点等等。 2…

Ruoyi5.x RuoYi-Vue-Plus新建Translation翻译类

若依框架&#xff08;RuoYi&#xff09;中的Translation翻译类主要作用在于实现字段值的转换或翻译功能&#xff0c;以提高数据展示的准确性和友好性。以下是其具体作用的一些关键点&#xff1a; 字段值转换&#xff1a;若依框架在处理数据时&#xff0c;有时需要将某些字段的…

CrawlSpace爬虫部署框架介绍

CrawlSpace爬虫部署框架介绍 全新的爬虫部署框架&#xff0c;为了适应工作的爬虫部署的使用&#xff0c;需要自己开发一个在线编写爬虫及部署爬虫的框架&#xff0c;框架采用的是Django2.2bootstap依赖scrapyd开发的全新通用爬虫在线编辑部署及scrapy项目的部署框架。项目实现的…

读AI未来进行式笔记08自主57

1. 自主57 1.1. 自主57被视为继火药、核57之后的“第三次zhan筝革命” 1.2. 虽然地雷和导弹揭开了早期简单自主57的序幕&#xff0c;但运用了AI技术的真正的自主57才是正片 1.2.1. AI自主57让整个sha戮过程&#xff1a;搜寻目标、进入zhan斗、抹sha生命&#xff0c;完全无须…

60.线程安全的集合类

第一种&#xff1a; HashTable,Vector 底层使用的Synchronized加锁实现的&#xff0c;性能不高&#xff0c;不推荐。 第二种&#xff1a; 修饰的安全集合 SynchronizedMap,SynchronizedList&#xff0c;性能不高&#xff0c;不推荐。 第三种&#xff1a; J.U.C安全集合&am…

【Labview】通过串口通信从上位机读取和写入数据

最近博主需要通过Labview的上位机控制一个温控仪表&#xff0c;主要实现在上位机读取实时温度和设定的目标温度&#xff0c;以及通过上位机设定目标温度。这里将其中遇到的问题和心得分享给大家&#xff0c;博主自己也做一个记录。 由于温控仪表采用的485通讯&#xff0c;modb…

01-今日课程介绍

01-今日课程介绍 1.什么是微服务? 微服务技术就是SpringCloud技术吗? ​ 错!,微服务其实是分布式架构的一种,所谓分布式架构就是要把服务做拆分,而拆分的过程中其实会产生各种各样的问题需要去解决,而SpringCloud其实仅仅是解决了服务拆分时候的 服务治理 问题 。至于…

C语言——字符数组

一、字符数组的定义 语言字符数组的定义是指在C语言中可以使用一组连续的字符来存储和处理字符串。在定义字符数组时&#xff0c;需要指定数组的大小&#xff0c;并且可以初始化数组的内容。 1、字符数组方式&#xff1a; char str[] "Hello,world!";2、指针方式…

JavaScript 如何访问本地文件夹

在浏览器环境中的JavaScript&#xff08;通常指的是前端JavaScript&#xff09;由于安全限制&#xff0c;无法直接访问用户的本地文件或文件夹。这是为了防止恶意脚本访问并窃取用户的敏感数据。 但是&#xff0c;有几种方法可以间接地让用户选择并访问本地文件&#xff1a; 使…

最长最短单词【菜蛋题解】

输入1行句子&#xff08;不多于200个单词&#xff0c;每个单词长度不超过100&#xff09;&#xff0c;只包含字母、空格和逗号。单词有至少一个连续字母构成&#xff0c;空格和逗号都算是单词间的间隔。 是输出第1个最长的单词和第1个最短单词。 输入&#xff1a;一行句子 输…

目标检测数据集 - 垃圾桶满溢检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍&#xff1a;垃圾桶满溢检测数据集&#xff0c;真实场景高质量图片数据&#xff0c;涉及场景丰富&#xff0c;比如城市道边垃圾桶满溢、小区垃圾桶满溢、社区垃圾桶满溢、农村道边垃圾桶满溢、垃圾集中处理点垃圾桶满溢、公园垃圾桶满溢数据等。数据集标注标签划分为…