思路很簡單,順便選一個點開始,往前加,如果總值少于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; }};新聞熱點
疑難解答