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. 优势洗牌 中等 排序
本文作者:
本文链接: https://hgnulb.github.io/blog/2026/27398449
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!