leedcode 134. 加油站
Posted issue是fw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leedcode 134. 加油站相关的知识,希望对你有一定的参考价值。
考虑从第一个加油站出发,最多能到第 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=1∑ygas[i]<i=1∑ycost[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=1∑k−1gas[i]>=i=1∑k−1cost[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. 加油站的主要内容,如果未能解决你的问题,请参考以下文章