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 @ 2024-08-24 00:03  风乐  阅读(16)  评论(0)    收藏  举报