思路很简单,顺便选一个点开始,往前加,如果总值少于0,就往后包一个点,主要是最后输出要分情况要小心!
class Solution {public: int canCompleteCircuit(vector<int>& gas, vector<int>& cost) { int n = gas.size(); int sum = 0; if(n == 0) return -1; vector<int>ve(n); for(int i = 0; i < n; ++ i){ ve[i] = gas[i] - cost[i]; sum += ve[i]; } if(sum < 0) return -1; sum = ve[0]; int right = 0, left = n - 1; while(right != left){ if(sum >= 0){ right++; sum += ve[right]; continue; } sum += ve[left]; left --; } if(sum >= 0 && left == n - 1) return 0; else if(sum >= 0) return left + 1; else return -1; }};新闻热点
疑难解答