首页 > 其他分享 >力扣每日一题 6/10

力扣每日一题 6/10

时间:2024-06-10 13:29:15浏览次数:19  
标签:10 指向 people 乘客 ed 每日 st 力扣 limit

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 1
        res=0
        st,ed=0,n-1
        while st<=ed:
            if people[st]+people[ed]<=limit:
                res+=1
                st+=1
                ed-=1
            else:
                res+=1
                ed-=1
        return res

总结:

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

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

标签:10,指向,people,乘客,ed,每日,st,力扣,limit
From: https://blog.csdn.net/Xxy_1008/article/details/139574411

相关文章

  • 202400610刷题总结
    T1T559。T2(带权并查集)1380。把行和列的取值看成变量,其中行取1代表+1,列取1代表-1,为了凑x-y=c,这样可以拿并查集来做了。维护d[x],到根的距离,我们把边定义为+,反向走为-。这样就行了,如果在一个集合,那么判断距离是不是c。还可以差分约束,dfs(直接遍历一遍,遇到环就判断).#i......
  • 【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 机场航班调度程序(100分) - 三语言A
    ......
  • 信息学奥赛一本通第1022题
    1022:整型与布尔型的转换【题目描述】将一个整型变量的值赋给一个布尔型变量,再将这个布尔型变量的值赋给一个整型变量,得到的值是多少?【输入】一个整型范围内的整数,即初始时整型变量的值。【输出】一个整数,经过上述过程后得到的结果。【输入样例】3【输出样例】1......
  • Tektronix 泰克 MDO4104C 混合域示波器
    Tektronix泰克MDO4104C混合域示波器主要性能指标1.示波器4 条模拟通道1 GHz、500 MHz、350 MHz和200 MHz带宽型号带宽可升级(最高达1 GHz)最高达5 GS/s采样率所有通道上20 M记录长度>340,000 wfm/s的最大波形捕获速率标配无源电压探头,3.9 pF电容负载,1......
  • Tektronix 泰克 MDO3104 混合域示波器
    Tektronix泰克MDO3104混合域示波器主要性能指标1.示波器分为2 条模拟通道和4 条模拟通道两种型号1 GHz、500 MHz、350 MHz、200 MHz和100 MHz带宽型号带宽可升级(最高达1 GHz)最高达5 GS/s采样率所有通道上10 M记录长度>280,000 wfm/s的最大波形捕获......
  • 【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 最富裕的小家庭(100分) - 三语言AC
    ......
  • 10-1:Action与Func委托
     1.Action:0到16个参数的没有返回值的泛型委托Actionaction1=()=>{};Action<int>action2=i=>Console.WriteLine(i);2.用Action类型做参数:this.DoNothing(action1);privatevoidDoNothing(Actionact){act.Invoke();......
  • 6/10死神永生服周报第四期
    目录死神永生新闻地形收集通知本期专辑:高速行驶死神永生新闻前一周的治理新闻时间人行为处罚方案6/4edededgegegeg炸服(出生点)设为生存一周地形收集通知死神永生服今日起收集服中各种地形,包括各种山洞、山脉、森林、沙漠、等等。收集到的足够......
  • C++Primer Plus 第12章 类和动态内存分配 12.10编程练习第1题new,delete的指向深度拷
    C++PrimerPlus第12章类和动态内存分配12.10编程练习第1题`提示:练习一定要动手操作涉及标准函数及关键词1,new[],delete[],strlen(),strcpy_s(),cout,endl,explicit例如:1,对于下面的类的声明:`提示:设计数组和字符串的new,delete文章目录C++PrimerPlus第12章类......
  • Zabbix 7.0 LTS OVF (build with LNMP based on Rocky 8.10) - VMware 虚拟机模板
    Zabbix7.0LTSOVF(buildwithLNMPbasedonRocky8.10)-VMware虚拟机模板Zabbix7.0LTS|企业级开源监控解决方案请访问原文链接:https://sysin.org/blog/zabbix-7-ovf/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgZabbix简介全方位监控获取整个IT......