881.救生艇

目录

题目

给定数组 people 。peoplei表示第 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;
    }
};

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

相关推荐
地平线开发者5 小时前
profiler debug 工具用法与高一致性策略
算法·自动驾驶
编程大师哥6 小时前
匿名函数 lambda + 高阶函数
java·python·算法
我叫袁小陌6 小时前
算法解题思路指南
算法
地平线开发者6 小时前
Conv+BN+Add+ReLU 融合机制简介
算法·自动驾驶
yuanyuan2o26 小时前
模型预训练:Hugging Face Transformers 基础
算法·ai·语言模型·自然语言处理·nlp·深度优先
杨充6 小时前
1.3 浮点型数据设计灵魂
开发语言·python·算法
妄想出头的工业炼药师7 小时前
GS slam mono
算法·开源
_日拱一卒8 小时前
LeetCode:207课程表
java·数据结构·算法·leetcode·职场和发展
用户9874092388710 小时前
llamafactory 0.6.3 没有 llamafactory-cli
算法