一、题目
第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit。
每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。
返回载到每一个人所需的最小船数。(保证每个人都能被船载)。
点击查看原题
难度级别: 中等
二、思路
1)贪心
由于每艘船最多可以同时载两个人,假设现在最瘦的人体重为min
,最胖的人为max
,有:
- 如果
min+max
超重,那么max
只能自己坐一艘船- 如果
min+max
没有超重,那么两人坐同一艘船
三、代码
1)贪心
class Solution {
public int numRescueBoats(int[] people, int limit) {
Arrays.sort(people);
int s = 0, e = people.length - 1;
int ans = 0;
while (s < e) {
while (s < e && (people[s] + people[e]) > limit) {
ans++;
e--;
}
while (s < e && (people[s] + people[e]) <= limit) {
ans++;
s++;
e--;
}
}
return s == e ? ans+1 : ans;
}
}
时间复杂度为O(n)
,空间复杂度为O(1)
,这里不算上sort
排序的时间和空间