Wednesday, September 24, 2014

Leetcode: Gas Station

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.
Understand the problem:
For the car can go from station i to station i + 1, it should be guaranteed that remain + gas[i] >= cost[i]. So the most straight-forward solution is to try to start from each station. We can imagine that the solution would have O(n^2) complexity. 

A better approach:
Since we know that the solution is guaranteed to be unique. If we found we cannot make it to the next station, we start from next station. Then we can solve this problem in linear time. 

Code (Java):
public class Solution {
    public int canCompleteCircuit(int[] gas, int[] cost) {
        if (gas == null || gas.length == 0 || cost == null || cost.length == 0) {
            return -1;
        }
        
        int sum = 0;
        int total = 0;
        int startIdx = 0;
        
        for (int i = 0; i < gas.length; i++) {
            sum += (gas[i] - cost[i]);
            total += (gas[i] - cost[i]);
            
            if (sum < 0) {
                sum = 0;
                startIdx = i + 1;
            }
        }
        
        return total >= 0 ? startIdx % gas.length : -1;
    }
}


No comments:

Post a Comment