There are N gas stations along a circular route, where the amount of gas at station i is gas[i]
.
You have a car with an unlimited gas tank and it costs cost[i]
of gas to travel from station i to its next station (i+1). You begin the journey with an empty tank at one of the gas stations.
Return the starting gas station's index if you can travel around the circuit once, otherwise return -1.
Note:
The solution is guaranteed to be unique.
Solution:
The brute force solution costs O(n^2), I find a O(n) and one round solution. If gas[i] >= cost[i], then I mark it, and calcuate the gas in tank along next node, if it is less than zero, then restart search.
1 int canCompleteCircuit(vector<int> &gas, vector<int> &cost) { 2 int curr_gas = 0; 3 int idx = -1; 4 int tmp_gas = 0; 5 for(int i = 0; i < gas.size(); i ++) { 6 curr_gas += gas[i] - cost[i]; 7 if( idx != -1) 8 tmp_gas += gas[i] - cost[i]; 9 10 if(tmp_gas < 0) { 11 idx = -1; 12 tmp_gas = 0; 13 } 14 15 if(gas[i] - cost[i] >= 0 && idx == -1) { 16 idx = i; 17 tmp_gas += gas[i] - cost[i]; 18 } 19 } 20 21 if(curr_gas >= 0) 22 return idx; 23 else 24 return -1; 25 }