0
点赞
收藏
分享

微信扫一扫

【机器学习】LightGBM: 优化机器学习的高效梯度提升决策树

东言肆语 2024-06-18 阅读 6

题目

给定数组 people 。people[i]表示第 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)

思路

每一个船只能坐两个,要使船最少就要在不超过最大重量的前提下尽可能地去凑对,利用贪心的思维,就用最小的去匹配最大的,超出重量的就大的先上船留下更容易配对的小的

解题方法

对数组进行排序,用双指针记录当前最大值最小值的位置,进行缩减,超出重量的就大的先上船留下更容易配对的小的,循环终止为l<r,由于每一次都有人会上船所以只需要对lr指针的位置作判断即可

代码

class Solution {
    public int numRescueBoats(int[] people, int limit) {
        int n=people.length;
        Arrays.sort(people);
        int l=0;
        int r=n-1;
        int ans=0;
        while(l<=r){
            if(people[l]+people[r]<=limit){
                l++;
                r--;
            }else{
                r--;
            }
            ans++;
        }
        return ans;
    }
}
举报

相关推荐

0 条评论