134. 加油站(leetcode)

https://leetcode.cn/problems/gas-station/

贪心,原理是:  如果x能到达y,不能到达y+1,那么x-y之间的点也不可能到达y+1:z为xy之间一点,从x开始到z(在z加油前),剩余油量一定大等于0,但是从z开始的话,起始油量一定等于0 >> 起始油量大等于0都到达不了y+1,那起始油量为0就更不能到达y+1了

 

class Solution {
    public int canCompleteCircuit(int[] gas, int[] cost) {
        
        int n=gas.length;
        int sumGas=0;
        int totalGas=0;
        int start=0;
        for(int i=0;i<n;i++)
        {
            // 计算总gas
            totalGas+=gas[i]-cost[i];
            // 计算当前净收入
            sumGas+=gas[i]-cost[i];
            if(sumGas<0)
            {
                // 从上次起点到现在此点的区间都不可以走完环,直接使用下一个点作为新起点继续检查
                sumGas=0;
                start=i+1;
            }
        }
        // 总开支大于收入,无解
        if(totalGas<0)return -1;
        return start;
    }
}

 

posted @   风乐  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示