Leetcode 134. 加油站(中等) 贪心算法

labuladong讲解

 

134. 加油站(中等)

题目:

 

 思路:

就是每到达一个站点i,可以加gas[i]升油,但离开站点i需要消耗cost[i]升油,问你从哪个站点出发,可以兜一圈回来

汽车进入站点i可以加gas[i]的油,离开站点会损耗cost[i]的油,那么可以把站点和与其相连的路看做一个整体,将gas[i] - cost[i]作为经过站点i的油量变化值:

有了这个环形数组,我们需要判断这个环形数组中是否能够找到一个起点start,使得从这个起点开始的累加和一直大于等于 0

如果把这个「最低点」作为起点,就是说将这个点作为坐标轴原点,就相当于把图像「最大限度」向上平移了

 

复制代码
class Solution {
public:
    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
        int n=gas.size();
        //记录累计的剩余油量
        int sum=0;
        //记录起点
        int start=0;
        //记录剩余油量的最小值
        int minSum=0;
        for(int i=0;i<n;++i){
            sum+=gas[i]-cost[i];
            //如果剩余油量小于最小值,更新起点跟最小值
            //目的是找出累计油量最小的位置,并将起点更新至i+1
            //这样保证可以到达最低点
            // 经过第 i 个站点后,使 sum 到达新低
            // 所以站点 i + 1 就是最低点(起点)
            if(sum<minSum){
                start=i+1;
                minSum=sum;
            }
        }
        //如果总剩余小于0,意味着不能走完
        if(sum<0) return -1;
        //由于有环,start==n也就是0
        return start==n?0:start;
    }
};
复制代码

 

posted @   鸭子船长  阅读(102)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
历史上的今天:
2021-03-04 Leetcode 41.第一个缺失的正数 tag 数组 hard
2021-03-04 [实践OK]CentOS下vim编辑器在可视模式下在secureCRT无法复制的办法。(转)
2016-03-04 android 打Patch的方法 .
2016-03-04 将packages/apps/下的app导入eclipse
2016-03-04 android源码framework下添加新资源的方法
2016-03-04 Framework/base 下添加自定义模块的步骤
点击右上角即可分享
微信分享提示