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;
}
}