class Solution {
public:
    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
        int n = gas.size();
        if(n == 0) return -1;
        
        int cnt = 0;
        int sum = 0;
        int i = 0;
        int start = 0;
        int first_start = -1;
        
        while(cnt < n)
        {
            sum += gas[i] - cost[i];
            
            if(sum < 0)
            {
                sum = 0;
                cnt = 0;
                start = (i+1)%n;      //从这个i开始的
            }
            else
            {
                cnt ++;
            }
            
            i = (++i)%n;
            
            if(start == 0)  break;
           
        }
        return cnt == n ? start : -1;
    }
};

怎么判断无解呢?

循环多少次算无解?

首先,start不保证是连续变化的。所以你记录了第一次的start,后面未必一定经过这个值。可能会跳过去。导致无限循环。比如gas=[2,4],cost=[3,4]的情况。

start = 0,

i = 0 时候, sum = -1 < 0,所以 sum = 0,cnt = 0,start = 1. i++

i = 1时候,sum = 0, ok ,cnt = 1, i = 0.

i = 0时候,sum = -1,又回来了。。。死循环

start 一直等于1.死循环了。检测不到!

 

posted on 2017-12-11 10:04  newbird2017  阅读(160)  评论(0)    收藏  举报