134. 加油站

在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。

你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。

给定两个整数数组 gas 和 cost ,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1 。如果存在解,则 保证 它是 唯一 的。

解法

用图解的思维去来解决

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function canCompleteCircuit(gas: number[], cost: number[]): number {
const len = gas.length;
let spare = 0;
let minSpare = Infinity;
let minIndex = 0;

for(let i = 0; i < len; i++) {
spare += gas[i] - cost[i];
if (spare < minSpare) {
minSpare = spare;
minIndex = i;
}
}

if (minSpare > 0) return 0;

return spare < 0 ? - 1 : (minIndex + 1) % len;
};