文巾解题 881. 救生艇

这篇博客探讨了一种使用贪心策略解决救援船只分配的问题,通过将人员按重量排序,尝试将最轻和最重的组合在一起,以最小化船只数量。博主提供了两种实现方式:递归和双指针。在递归方法中,定义了一个内部函数来处理子问题,而在双指针方法中,通过迭代更新两个指针来寻找合适的配对。这两种方法都有效地解决了限制船只载重的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 题目描述

2 解题思路:贪心

         我们把重量从低到高排序,尽量让最轻的人和最重的人在一艘船上。如果最轻的+最终的仍然比limit重,那么最重的人单独一艘船

2.1 递归解决贪心

class Solution:
   def numRescueBoats(self, people: List[int], limit: int) -> int:
        people.sort()

        def f(begin,end):
            print(begin,end)
            if(begin>end):
                return 0
            if(begin==end):
                return 1
            if(people[begin]+people[end]<=limit):
                return 1+f(begin+1,end-1)
            if(people[begin]+people[end]>limit):
                return 1+f(begin,end-1)

        return(f(0,len(people)-1))

2.2 双指针解决贪心

class Solution:
   def numRescueBoats(self, people: List[int], limit: int) -> int:
        people.sort()
        ret=0
        begin=0
        end=len(people)-1
        while(begin<=end):
#begin=end不用特判,因为无论如何就剩下这一个了,船的数量肯定加一,所以不用管他是在if语句还是else语句里面
            if(people[begin]+people[end]<=limit):
                begin+=1
                end-=1
            else:
                end-=1
            ret+=1
        return(ret)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UQI-LIUWJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值