题目
思路
统计每过一个加油站的剩余油量gas[i] - cost[i]
- 注意,如果出现[3, -3]这种正好剩余油量是0的,是可以跑到下一个加油站的。因为我们算剩余油量的时候已经减掉了从这个加油站跑出去的消耗。所以过程中curSum = 0不要紧;
- totalSum也可以等于0,但是不能小于0;
- 从i = 0开始遍历,这个意思就是尝试每一个位置作为start,当curSum < 0的时候,就说明目前的start不行,要从现在的j + 1开始重新算start
- j + 1后面万一负数更大呢?首先,既然到了start = j + 1这步,就说明前面的位置都不能是start,而只要后续保证totalSum >=0 (也就是一定有起点),那就要从j + 1开始尝试
代码
/**
* @param {number[]} gas
* @param {number[]} cost
* @return {number}
*/
var canCompleteCircuit = function(gas, cost) {
let len = gas.length;
let curSum = 0;
let totalSum = 0;
let start = 0;
for(let i = 0; i < len; i++){
curSum += gas[i] - cost[i];
totalSum += gas[i] - cost[i];
if(curSum < 0) {
start = i + 1;
curSum = 0;
}
}
if(totalSum < 0) return -1;
return start;
};