LeetCode 881. 救生艇
题目描述
✅ 881. 救生艇
思路分析
解法一:排序 + 双指针(推荐)
核心思路:
- 将体重排序,最轻与最重尝试同船。
- 若两者之和超限,则最重单独一船。
- 否则轻重配对。
复杂度分析:
- 时间复杂度:O(n log n),其中 n 表示人数。
- 空间复杂度:O(1),排序原地进行。
import java.util.Arrays;
class Solution {
public int numRescueBoats(int[] people, int limit) {
Arrays.sort(people);
int left = 0;
int right = people.length - 1;
int boats = 0;
while (left <= right) {
if (people[left] + people[right] <= limit) {
left++;
right--;
} else {
right--;
}
boats++;
}
return boats;
}
}
import "sort"
func numRescueBoats(people []int, limit int) int {
sort.Ints(people)
left, right := 0, len(people)-1
boats := 0
for left <= right {
if people[left]+people[right] <= limit {
left++
right--
} else {
right--
}
boats++
}
return boats
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 11. 盛最多水的容器 | 中等 | 双指针 |
| 455. 分发饼干 | 简单 | 贪心 |
| 948. 令牌放置 | 中等 | 贪心 |
| 1099. 小于 K 的两数之和 | 简单 | 双指针 |
| 870. 优势洗牌 | 中等 | 排序 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!