Thursday, March 14, 2019

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 minimum starting gas station’s index if you can travel around the circuit once, otherwise return -1.

You can only travel in one direction. i to i+1, i+2, ... n-1, 0, 1, 2..
Completing the circuit means starting at i and ending up at i again.

1 comment:

kart said...

private static int [] gas = { 2, 3, 3, 2};
private static int[] cost = { 3, 4, 2, 1};
//Compute the diff matrix => Cost-Gas. Since calculation is trivial hardcoding it here. Using extra memory for simplification.
private static int[] diff = { -1, -1, 1, 1, -1, -1, 1};
private static int GetGasStation()
{
int cnt = 0;
int sum = 0;
for(int i=0; i < diff.Length; i++)
{
sum += diff[i];
cnt++;
if(sum < 0)
{
sum = 0;
cnt = 0;
}
if (cnt == gas.Length)
return i+1-cnt;
}
return -1;
}