class Solution {
public int canCompleteCircuit(int[] gas, int[] cost) {
int cur = 0;
int sum = 0;
int index = 0; //记录出发时加油站编号
for (int i = 0; i < gas.length; i++) {
cur += gas[i] - cost[i];
sum += gas[i] - cost[i];
if (cur < 0) {
cur = 0;
index = i + 1;
}
}
if (sum < 0) {
return -1;
}
return index;
}
}
想法
1. 从零开始记录区间[0,i]的总和(即上面的cur),一旦cur小于0 ,则前面[0,i]区间任何位置作为开始都不能i+1,所以重置开始位置(即index = i + 1)。
2.前提如果能跑完一圈,则总油量一定大于耗油量。所以,屏蔽细节,计算出区间[0,gas.length-1] 之间的剩余剩余油量是否大于0(即总油量大于耗油量)