leetcode加油站

1.一次遍历即可

首先有一条是确定的,如果总的汽油量大于等于消耗量,一定可以走完全程。

从0出发,假设可以一直走到K站,到K+1站时汽油不足,即无法到达K+1,此外我们将油箱中的油量清空,重新从K+1出发。然后重新计算油箱油量,当无法到达下一加油站时,再次重新设置起点,这里可以以K+1为分界线,将所有的加油站分为两类:

0--K:从0出发可以到达K,无法到达K+1,K+1--end,从K+1重新出发,可以到达end,且可以以剩余油量继续从0出发,到达K,即绕一圈。

代码如下:

class Solution {
public:
    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
      int rest = 0, run = 0, start = 0;
    for (int i = 0; i < gas.size(); ++i){
        run += (gas[i] - cost[i]);
        rest += (gas[i] - cost[i]);
        if (run < 0){
            start = i + 1;
            run = 0;
        }
    }
    return rest < 0 ? -1: start;
    }
};
发布了191 篇原创文章 · 获赞 3 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_38196982/article/details/104777632