1.6 log 134. 加油站,135. 分发糖果

cpp 复制代码
class Solution {
public:
    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
        int cursum=0;
        int totalsum=0;
        int start=0;
        for(int i=0;i<gas.size();i++){
            cursum+=gas[i]-cost[i];
            totalsum+=gas[i]-cost[i];
            if(cursum<0){
                start=i+1;
                cursum=0;
            }
        }
        if(totalsum<0) return -1;
        return start;
    }
};

这道题的贪心就是如果加油和耗油和为负,则直接从下一个加油站出发,因为前面的累加都只能为负,之前每次加油和耗油和都为正,对下一个加油和耗油都是正向增益,所以前面累加只能为负,只能选取下一个节点为出发节点,如果选到最后一个节点都不满足条件,则,必定是总耗油量大于加油量,返回-1

cpp 复制代码
class Solution {
public:
    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
        for(int i=0;i<gas.size();i++){
            int rest=gas[i]-cost[i];
            int index=(i+1)%gas.size();
            while(rest>=0&&index!=i){
                rest+=gas[index]-cost[index];
                index=(index+1)%gas.size();
            }
            if(rest>=0&&index==i) return i;
        } 
        return -1;
    }
};

这是这道题的暴力解法,for循环适合从头到尾遍历,while循环适合环形遍历,代码巧妙的一点是利用取余实现数组的闭环循环。

135. 分发糖果

cpp 复制代码
class Solution {
public:
    int candy(vector<int>& ratings) {
        vector<int> sugar(ratings.size(),1);
        for(int i=1;i<ratings.size();i++){
            if(ratings[i]>ratings[i-1]) sugar[i]=sugar[i-1]+1;
        }
        for(int i=ratings.size()-2;i>=0;i--){
           if(ratings[i]>ratings[i+1]) sugar[i]=max(sugar[i],sugar[i+1]+1);
        }
        int count=0;
        for(int a:sugar){
            count+=a;
        }
        return count;
    } 
};

先判断从左到右,ratingi>ratingi-1的情况,再判断从右到左,ratingi>ratingi+1的情况,为什么不能从左到右再来一遍,因为ratingi>ratingi+1,从左到右不能影响下一次判断。

对于ratingi>ratingi-1&&ratingi>ratingi+1的情况,sugari要选取两次判断的最大值

相关推荐
529宝宝起名网5 分钟前
用 Python 实现名字寓意评分算法:基于 NLP 语义分析的名字内涵深度评估
python·算法·自然语言处理
ocean210311 分钟前
2025-2026年AI提效与实践大厂面试高频问题
人工智能·面试·职场和发展·提示词工程·ai提效
带多刺的玫瑰1 小时前
Leecode#26刷题之删除有序数组中的重复项
数据结构·算法·leetcode
en.en..2 小时前
C语言核心解析:#define与typedef本质区别
开发语言·c++·算法
YonyouHRSaaS3 小时前
AI视频面试系统定义、功能作用、品牌推荐、选择攻略
人工智能·面试·职场和发展·ai面试·视频面试·ai视频面试
zihan5184 小时前
理论:构建“基于客观事实、可量化、闭环自给自足”的个人操作系统
笔记·职场和发展·学习方法
wabs6664 小时前
关于二叉树【429.N叉树的层序遍历的思考】
数据结构·c++·算法·leetcode·二叉树
hetao17338374 小时前
2026-09-08 hetao1733837 的刷题记录
c++·算法
C++ 老炮儿的技术栈5 小时前
MFC CPtrArray的用法
开发语言·数据结构·c++·算法·mfc·c
小鱼爱吃草灬灬5 小时前
实时面试辅助排查清单:音频来源、问题输入与上下文
面试·职场和发展·音视频