881. 救生艇[中等]

66 阅读1分钟

题目

给定数组 people 。people[i]表示第 i 个人的体重 ,船的数量不限,每艘船可以承载的最大重量为 limit。

每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。

返回 承载所有人所需的最小船数 。

  • 来源:力扣(LeetCode)
  • 链接:leetcode.cn/problems/bo…
  • 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解法一

思路

  • 排序
  • 前后指针

代码

    public int numRescueBoats(int[] people, int limit) {
        Arrays.sort(people);
        int i = 0;
        int j = people.length - 1;
        int count = 0;
        while (i <= j) {
            if (people[i] + people[j] <= limit) {
                i++;
            }
            j--;
            count++;
        }
        return count;
    }

复杂度

  • 时间复杂度:O(nlogn)
  • 空间复杂度:O(logn) //排序需要额外的空间