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.
To solve this question, you need to understand three rules:
How to prove 2? A->B->C and A can't go to C
If gas[A] < cost[A], then A can not go to B. Therefore, gas[A] >=cost[A].
We already know A can not go to C, we have gas[A] + gas[B] < cost[A] + cost[B] And gas[A] >=cost[A],
Therefore, gas[B] < cost[B], i.e., B can not go to C.
public int canCompleteCircuit(int[] gas, int[] cost) {
int leftGas = 0;
int sum = 0;
int startIndex = 0;
for (int i=0; i<gas.length; i++) {
leftGas += gas[i] - cost[i];
sum += gas[i] - cost[i];
if (sum<0) {
startIndex = i+1;
sum = 0;
}
}
return leftGas>=0?startIndex:-1;
}
}