881.救生艇

目录

题目

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

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

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

过程

cpp 复制代码
class Solution {
public:
    int numRescueBoats(vector<int>& people, int limit) {
        sort(people.begin(),people.end());
        int sum=0;//船的计数
        int l=0;
        int r=people.size()-1;
        //最小的和最大的坐船,如果超重了,那么就是最大的独自一条船,
        while(l<r){
            if(people[l]+people[r]<limit){
                sum++;
                r--;
                l++;
            }else if(people[l]+people[r]>limit){
                sum++;
                r--;
            }else{
                sum++;
                l++;
                r--;
            }
        }
        return sum;
    }
};

发现最后总是会少一条船,可能忘记最后一条了。

推演了一下,确实l和r重合的时候,还有一个人,一条船没有计数

再最后加一个出while的判断。

cpp 复制代码
class Solution {
public:
    int numRescueBoats(vector<int>& people, int limit) {
        sort(people.begin(),people.end());
        int sum=0;//船的计数
        int l=0;
        int r=people.size()-1;
        //最小的和最大的坐船,如果超重了,那么就是最大的独自一条船,
        while(l<r){
            if(people[l]+people[r]<limit){
                sum++;
                r--;
                l++;
            }else if(people[l]+people[r]>limit){
                sum++;
                r--;
            }else{
                sum++;
                l++;
                r--;
            }
            if(l==r){
                sum++;
                l++;
            }
        }
        return sum;
    }
};

感觉双指针主要难点就是想清楚什么时候哪一边收敛。

相关推荐
一个不知名程序员www9 分钟前
算法学习入门---vector(C++)
c++·算法
云飞云共享云桌面16 分钟前
无需配置传统电脑——智能装备工厂10个SolidWorks共享一台工作站
运维·服务器·前端·网络·算法·电脑
福尔摩斯张24 分钟前
《C 语言指针从入门到精通:全面笔记 + 实战习题深度解析》(超详细)
linux·运维·服务器·c语言·开发语言·c++·算法
橘颂TA34 分钟前
【剑斩OFFER】算法的暴力美学——两整数之和
算法·leetcode·职场和发展
xxxxxxllllllshi1 小时前
【LeetCode Hot100----14-贪心算法(01-05),包含多种方法,详细思路与代码,让你一篇文章看懂所有!】
java·数据结构·算法·leetcode·贪心算法
前端小L1 小时前
图论专题(二十二):并查集的“逻辑审判”——判断「等式方程的可满足性」
算法·矩阵·深度优先·图论·宽度优先
铁手飞鹰1 小时前
二叉树(C语言,手撕)
c语言·数据结构·算法·二叉树·深度优先·广度优先
专业抄代码选手3 小时前
【Leetcode】1930. 长度为 3 的不同回文子序列
javascript·算法·面试
[J] 一坚3 小时前
深入浅出理解冒泡、插入排序和归并、快速排序递归调用过程
c语言·数据结构·算法·排序算法
czlczl200209254 小时前
算法:二叉搜索树的最近公共祖先
算法