LC每日一题|20240610 - 881. 救生艇

101 阅读1分钟

LC每日一题|20240610 - 881. 救生艇

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

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

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

提示:

  • 1 <= people.length <= 5 * 10^4
  • 1 <= people[i] <= limit <= 3 * 10^4

题目等级:Medium

解题思路

非常简单的一道贪心题~

我们的目标是把没上船的人群中最重的和最轻人放在一起,如果他们的体重和小于 limit ,那么就可以放到同一条船上,否则就只能让更重的人上船。

思路有了,方案就呼之欲出了: 排序 + 双指针

AC代码

class Solution {
    fun numRescueBoats(people: IntArray, limit: Int): Int {
        people.sort()
        var i = 0
        var j = people.size - 1
        var res = 0
        while (i <= j) {
            if (people[i] + people[j] <= limit) i++
            j--
            res++
        }
        return res
    }
}