您的位置:首页 > 其它

134. Gas Station

2016-07-25 03:17 405 查看

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

Greedy

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: