Gas Station

来源:互联网 发布:linux 打开防火墙端口 编辑:程序博客网 时间:2024/06/07 10:18

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.

O(n^2)解法

public class Solution {    public int canCompleteCircuit(int[] gas, int[] cost) {        int n=gas.length;        int x=0,steps=0;        for(int i=0;i<n;i++){            for(int j=i;j<i+n;j++){                int k=j%n;                x+=(gas[k]-cost[k]);                if(x<0) {                    steps=0;                    x=0;                    break;                }                else{                    steps++;                }                if(steps==n && x>=0) return i;            }        }        return -1;    }}
O(n)解法

The reason why I think this works: 1, if sum of gas is more than sum of cost, then there must be a solution. And the question guaranteed that the solution is unique(The first one I found is the right one). 2, The tank should never be negative, so restart whenever there is a negative number.

public class Solution {    public int canCompleteCircuit(int[] gas, int[] cost) {        int n=gas.length;        int tank=0;        int start=0;        int gasSum=0,costSum=0;        for(int i=0;i<n;i++){            gasSum+=gas[i];            costSum+=cost[i];            tank+=gas[i]-cost[i];            if(tank<0){                start=i+1;                tank=0;            }        }        if(gasSum>=costSum) return start;        else return -1;    }}



0 0