881. 救生艇
难度中等131收藏分享切换为英文接收动态反馈
第 i
个人的体重为 people[i]
,每艘船可以承载的最大重量为 limit
。
每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit
。
返回载到每一个人所需的最小船数。(保证每个人都能被船载)。
示例 1:
1 | 输入:people = [1,2], limit = 3 |
示例 2:
1 | 输入:people = [3,2,2,1], limit = 3 |
示例 3:
1 | 输入:people = [3,5,3,4], limit = 5 |
提示:
1 <= people.length <= 50000
1 <= people[i] <= limit <= 30000
通过次数24,141
提交次数47,412
双指针
先对数组从小到大排序,然后判断最重的和最轻的两个人是否可以上同一条船,如果不可以,那么最重的自己只能占用一条船,然后判断第二重的和最轻的是否可以上同一条船,如果可以,那么继续看第二轻和第三重的人是否可以上一条船。
即:从数组前面找一个最小的数,从数组后面找一个最大的数:
- 如果两数之和小于等于limit,那么船的数量加1,左右指针向中间收缩;
- 如果两数之和大于limit,那么右指针向左收缩,船的数量加1
1 | class Solution { |