134. Gas Station 加油问题

134. Gas Station 加油问题

每个油站有汽油值和到下一个站需要的汽油值,问:从哪个下标的油站开始走(初始汽油为0)能够走完所有的油站,走不到返回 -1

隐含条件:

  1. 所有油站的汽油值和必须大于所有 cost 之和
  2. 如果从某起点到某终点走不到,那么其中的任何一个站出发都不可能到,写几个式子可以简单证明
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
    int total=0, sum=0, start=0;
    for(int i=0;i<gas.size();++i) {
        total += gas[i]-cost[i];
        sum += gas[i]-cost[i];
        if (sum < 0) {
            start = i+1;
            sum=0;
        }
    }
    return (total<0) ? -1 : start;
}

#greedy