第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit

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

返回载到每一个人所需的最小船数。(保证每个人都能被船载)。

 

示例 1:

输入:people = [1,2], limit = 3
输出:1
解释:1 艘船载 (1, 2)

示例 2:

输入:people = [3,2,2,1], limit = 3
输出:3
解释:3 艘船分别载 (1, 2), (2) 和 (3)

示例 3:

输入:people = [3,5,3,4], limit = 5
输出:4
解释:4 艘船分别载 (3), (3), (4), (5)

提示:

  • 1 <= people.length <= 50000
  • 1 <= people[i] <= limit <= 30000
Related Topics
  • 贪心
  • 数组
  • 双指针
  • 排序

  • 👍 160
  • 👎 0
  • 题解

    8月26每日一题

    class Solution {
        public int numRescueBoats(int[] people, int limit) {
            Arrays.sort(people);
            //limit 必然大于 people的最大值,不然就有人走不了
            //所以从最重的人开始上船。每次尝试看看能否带上当前还没上船的最轻的人,如果不能则自己走,
            // 等下一个稍微轻一点的人再来尝试带走这个轻一点的人
            int  count = 0;
            int left = 0;
            int right = people.length-1;
            while (left < right){
                if (people[right]+people[left] <= limit){
                    left++;
                }
                right--;
                count++;
            }
            //最后只剩下一个人了
            if (left==right){
                count++;
            }
            return count;
        }
    }

    直接用了Arrays.sort(people),本题应该重点还是是双指针,排序这块省去