力扣每日一题-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;
    }
}
相关推荐
小O的算法实验室18 分钟前
2026年AST SCI1区TOP,基于速度障碍法的多无人机三维避障策略,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
AlenTech32 分钟前
141. 环形链表 - 力扣(LeetCode)
数据结构·leetcode·链表
U-52184F691 小时前
深入理解“隐式共享”与“写时复制”:从性能魔法到内存深坑
java·数据库·算法
pp起床1 小时前
Part02:基本概念以及基本要素
大数据·人工智能·算法
lzh200409191 小时前
红黑树详解
算法
敲代码的嘎仔1 小时前
Java后端开发——真实面试汇总(持续更新)
java·开发语言·程序人生·面试·职场和发展·八股
迈巴赫车主2 小时前
蓝桥杯20560逃离高塔
java·开发语言·数据结构·算法·职场和发展·蓝桥杯
泯仲2 小时前
Ragent项目7种设计模式深度解析:从源码看设计模式落地实践
java·算法·设计模式·agent
dulu~dulu2 小时前
算法---寻找和为K的子数组
笔记·python·算法·leetcode
moonsea02032 小时前
【无标题】
算法