leedcode 134. 加油站

Posted issue是fw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leedcode 134. 加油站相关的知识,希望对你有一定的参考价值。

Link

考虑从第一个加油站出发,最多能到第 y y y个加油站

∑ i = 1 y g a s [ i ] < ∑ i = 1 y c o s t [ i ] \\sum\\limits_i=1^ygas[i]<\\sum\\limits_i=1^y cost[i] i=1ygas[i]<i=1ycost[i]

那么考虑现在从第 k ∈ [ 1 , y ] k\\in[1,y] k[1,y]个加油站出发,能否突破第 y y y个加油站

但是显然不可能,因为有

∑ i = 1 k − 1 g a s [ i ] > = ∑ i = 1 k − 1 c o s t [ i ] \\sum\\limits_i=1^k-1gas[i]>=\\sum\\limits_i=1^k-1 cost[i] i=1k1gas[i]>=i=1k1cost[i]

可以发现如果从第一个加油站出发到第 k k k个加油站还有油多,即使是这样也没能通过第 y y y个加油站

所以 [ 1 , y ] [1,y] [1,y]的所有起点都不可能,这样只需要考虑后面

重复这样做,复杂度是 O ( n ) O(n) O(n)

class Solution 
public:
    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) 
        int n = gas.size();
        for(int i=0;i<n;i++)
        
            int now = 0, j = i;
            while( now>=0 )
            
                now += gas[j], now -= cost[j];
                j = (j+1)%n;
                if( j==i && now>=0 )  return i;
            
            if( j<=i )   return -1;
            i = j-1;    
        
        return -1;
    
;

以上是关于leedcode 134. 加油站的主要内容,如果未能解决你的问题,请参考以下文章

134. 加油站

LeetCode 134.加油站

134. 加油站

134. 加油站-一次遍历

java 134.加油站(#)。java

java 134.加油站(#)。java