134.Gas Station

你快乐吗?

Posted by bbkgl on September 26, 2019

134. Gas Station

C++,模拟题大概???参考热评大佬,然后说下自己的理解和思路。

有解的话要满足两个条件:

  • 所有站点的油量和要大于跑一整圈的耗油量的和
  • 绕圈的途中,在任何一个站点加完油后,都要能到达下一个站点

假设起始站点为0,一旦遇到在k站无法到达k+1站的情况,则说明起始站一定不在k及k之前,原因如下(假设油箱中剩余油量为rest):

  • 首先确定一个结论:每成功到达一个站,剩余油量rest一定是>=0的
  • 如果在k站无法到达k+1站,根据上述结论,说明以0,1,2,3…k等站为起始站,都不能让车子从k站到达k+1站
  • 于是可以确定,起始站一定不在k及k之前,所以假设起始站为k+1站

于是代码如下:

代码如下:

class Solution {
public:
    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
        int start = 0;
        int run = 0;
        int rest = 0;
        for (int i = 0 ; i < gas.size(); i++) {
            run += gas[i] - cost[i];
            rest += gas[i] - cost[i];
            if (run < 0) {
                run = 0;
                start = i + 1;
            }
        }
        if (rest >= 0) return start;
        else return -1;
     }
};