N个加油站问题

时间:2021-09-21 04:08:53

问题:城市的环形路有n个加油站,第i个加油站的油量用gas[i]来表示,你有如下的一辆车:

它的油缸是无限量的,初始是空的

它从第i个加油站到第i+1个加油站消耗油量为cost[i]

现在你可以从任意加油站开始,路过加油站可以不断的加油,问是否能够走完环形路。如果可以返回开始加油站的编号,如果不可以返回-1。

https://leetcode.com/problems/gas-station/

思路:

假设起始的加油站是src,最后一个加油站是dst,在从src出发达到下一个加油站的油剩下sum。那么需要能够从src到dst中的每个点的油剩余量都有>=0。

假设从src出发,某点的油量sum<0,那么我们就从src-1站出发,此时达到这个“某点”的油量剩余就是sum += gas[src-1]-cost[src-1],此时的dst将是src -1 再 -1。

code:

class Solution {
public:
    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
        int src = 0;
        int dst = (src-1+gas.size())%gas.size();;
        int sum = 0;
        int i = src;
        while(i != dst +1){
            if(sum<0){
                src = (src-1+gas.size())%gas.size();
                dst = (src-1+gas.size())%gas.size();
                sum+=gas[src] - cost[src];
            }
            else {
                sum += gas[i] - cost[i];
                i++;
            }
        }
       
        if(sum>=0) return src;
        else return -1;
    }
};

参考:http://blog.csdn.net/a83610312/article/details/11726443