题目

134. 加油站_i++

分析

134. 加油站_i++_02


每个加油站的剩余量rest[i]为gas[i] - cost[i]

我们主要研究这个加油站剩余量:

i从0开始累加rest[i],和记为cur,一旦cur小于零,说明[0, i]区间都不能作为起始位置,起始位置index从i+1算起,再从0计算curSum。

都遍历完一遍只要耗油总量大于等于0,那么index就起始位置。

局部最优:

当前累加rest[j]的和cur一旦小于0,起始位置至少要是j+1,因为从j开始一定不行。

全局最优:找到可以跑一圈的起始位置。

代码

class Solution {
public int canCompleteCircuit(int[] gas, int[] cost) {
int cur = 0;
int total = 0;
int index = 0;
for(int i = 0;i < gas.length;i++){
cur += gas[i] - cost[i];
total += gas[i] - cost[i];

if(cur < 0){
index = (i + 1)%gas.length;
cur = 0;
}
}
if(total < 0) return -1;
return index;
}
}

134. 加油站_算法_03