标签:
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.
Key to the solution is a conclusion:
If sum of gas >= sum of costs, then there must exists one or more solution.
If sum of gas < sum of costs, then there is no solution.
So we can use method of exclusion here.
We need also note here that if A can not reach C in a the sequence of A-->B-->C, then B can not make it either.
1 public class Solution { 2 public int canCompleteCircuit(int[] gas, int[] cost) { 3 if (gas == null || cost == null) 4 return -1; 5 if (gas.length != cost.length) 6 return -1; 7 int start = 0; 8 int sumRemaining = 0; 9 int totalRemaining = 0; 10 for (int i = 0; i < gas.length; i++) { 11 int tmp = gas[i] - cost[i]; 12 if (sumRemaining >= 0) { 13 sumRemaining += tmp; 14 } else { 15 start = i; 16 sumRemaining = tmp; 17 } 18 totalRemaining += tmp; 19 } 20 if (totalRemaining < 0) 21 return -1; 22 return start; 23 } 24 }
标签:
原文地址:http://www.cnblogs.com/ireneyanglan/p/4858240.html