题目
The i-th person has weight people[i]
, and each boat can carry a maximum weight of limit
.
Each boat carries at most 2 people at the same time, provided the sum of the weight of those people is at most limit.
Return the minimum number of boats to carry every given person. (It is guaranteed each person can be carried by a boat.)
Example 1:
Input: people = [1,2], limit = 3
Output: 1
Explanation: 1 boat (1, 2)
Example 2:
Input: people = [3,2,2,1], limit = 3
Output: 3
Explanation: 3 boats (1, 2), (2) and (3)
Example 3:
Input: people = [3,5,3,4], limit = 5
Output: 4
Explanation: 4 boats (3), (3), (4), (5)
Note:
- 1 <=
people.length
<= 50000 - 1 <=
people[i]
<=limit
<= 30000
解析
方法一
将people
排序, 然后判断情况上船:
- 当前最轻的和最重的不能坐一起 $\Rightarrow$ 最重的不能和任何人共坐一条船 $\Rightarrow$ 最重的人单独上船 $\Rightarrow$
tailPointer--
; - 当前最轻的和最重的能坐一起 $\Rightarrow$ 都上船 $\Rightarrow$
tailPointer--; headPointer++
重复上述过程直至 headPointer $\geq$ tailPointer
方法二
与方法一类似, 创建一个limit + 1
长的数组当作map, 省去排序步骤.
代码
方法一(c++)
1 | class Solution { |
方法二(c++)
1 | class Solution { |