134. Gas Station

134. 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.

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;
  }
}

 

 
 
posted @ 2016-07-25 03:17  新一代的天皇巨星  阅读(210)  评论(0)    收藏  举报