文巾解题 881. 救生艇

Posted UQI-LIUWJ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文巾解题 881. 救生艇相关的知识,希望对你有一定的参考价值。

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)

 

以上是关于文巾解题 881. 救生艇的主要内容,如果未能解决你的问题,请参考以下文章

Code皮皮虾贪心And双指针快速解题:881. 救生艇

LeetCode 881 救生艇[贪心 双指针] HERODING的LeetCode之路

LeetCode 881 救生艇(贪心)

LeetCode:救生艇881

[M贪心] lc881. 救生艇(贪心+贪心证明)

[M贪心] lc881. 救生艇(贪心+贪心证明)