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.死循环了。检测不到!
浙公网安备 33010602011771号