力扣每日一题-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;
    }
}
相关推荐
无敌最俊朗@29 分钟前
数组-力扣hot56-合并区间
数据结构·算法·leetcode
囚生CY1 小时前
【速写】优化的深度与广度(Adam & Moun)
人工智能·python·算法
码农多耕地呗1 小时前
力扣94.二叉树的中序遍历(递归and迭代法)(java)
数据结构·算法·leetcode
微笑尅乐1 小时前
BFS 与 DFS——力扣102.二叉树的层序遍历
leetcode·深度优先·宽度优先
懒羊羊不懒@2 小时前
Java基础语法—最小单位、及注释
java·c语言·开发语言·数据结构·学习·算法
白云千载尽3 小时前
leetcode 912.排序数组
算法·leetcode·职场和发展
哆啦刘小洋3 小时前
Tips:预封装约束的状态定义
算法
代码充电宝3 小时前
LeetCode 算法题【简单】290. 单词规律
java·算法·leetcode·职场和发展·哈希表
Juan_20123 小时前
P1040题解
c++·算法·动态规划·题解
Onesoft%J1ao3 小时前
C++竞赛递推算法-斐波那契数列常见题型与例题详解
c++·算法·动态规划·递推·信息学奥赛