力扣每日一题-881

题目

给定数组 peoplepeople[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指针的位置作判断即可

代码

java 复制代码
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;
    }
}
相关推荐
董董灿是个攻城狮9 小时前
AI视觉连载8:传统 CV 之边缘检测
算法
AI软著研究员16 小时前
程序员必看:软著不是“面子工程”,是代码的“法律保险”
算法
FunnySaltyFish16 小时前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
颜酱17 小时前
理解二叉树最近公共祖先(LCA):从基础到变种解析
javascript·后端·算法
地平线开发者1 天前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮1 天前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者1 天前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考1 天前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
HXhlx2 天前
CART决策树基本原理
算法·机器学习
Wect2 天前
LeetCode 210. 课程表 II 题解:Kahn算法+DFS 双解法精讲
前端·算法·typescript