赞
踩
给定数组 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:
- 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即为所需的最少船只数。具体步骤如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。