Skip to content
On this page

加油站

Question

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

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

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

image-20230618085641379

思路

如果总油量减去总消耗大于等于零那么一定可以跑完一圈,说明 各个站点的加油站 剩油量rest[i]相加一定是大于等于零的。

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

i从0开始累加rest[i],和记为curSum,一旦curSum小于零,说明[0, i]区间都不能作为起始位置,因为这个区间选择任何一个位置作为起点,到i这里都会断油,那么起始位置从i+1算起,再从0计算curSum

js
var canCompleteCircuit = function(gas, cost) {
    let res = 0
    let totalsum = 0
    let cursum = 0
    for(let i=0; i<gas.length; i++){      // 求出经过 i 站之后剩余油量`
        totalsum += gas[i] - cost[i]
        cursum += gas[i] - cost[i]
        if(cursum<0) {
            res = i+1
            cursum = 0
        }  
        console.log(cursum,i)
    }
    if(totalsum < 0) return -1
    return res
};