标签:
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.
Hide Tags
public class Solution { public int canCompleteCircuit(int[] gas, int[] cost) { int start = 0; //start from start while(start<gas.length) { int net = gas[start] - cost[start]; if(net < 0) { ++start; continue; } int current = start; int sum = net; int count = 1; //already visit current, can start the journey with sum while(count < gas.length) { ++current; //go to the next stop if(current == gas.length) current = 0; sum += gas[current] - cost[current]; if(sum<0) { if(current + 1 <= start) //fix the case gas[2,4] with cost[3,4] return -1; start = current + 1; //start from next one. break; } ++count; } if(count == gas.length) return start; } return -1; } }
Simpler solution:
public class Solution { public int canCompleteCircuit(int[] gas, int[] cost) { int start = 0, total = 0, tank = 0; //if car fails at ‘start‘, record the next station for (int visited = 0; visited < gas.length; ++visited) { tank += gas[visited] - cost[visited]; if (tank < 0) { start = visited + 1; total += tank; tank = 0; } } return (total + tank < 0) ? -1 : start; } }
标签:
原文地址:http://www.cnblogs.com/neweracoding/p/5702163.html