fazer o caminho circular completo, o exercício de caminho mais curto?
Consegui essa pergunta em uma entrevista e não consegui resolvê-l
Você tem uma estrada circular, com N número de postos de gasolina. Você sabe a quantidade de gás que cada estação possui. Você sabe a quantidade de gás que precisa para ir de uma estação para a próxima. Seu carro começa com 0 gasolina. A pergunta é: Crie um algoritmo para saber em qual posto de gasolina você deve começar a dirigir para CONCLUIR o CAMINHO circular. Não especifica que você deve visitar todas as estações. Você só pode dirigir no sentido horário.
Eu tive que fazer isso em c #
O único código que comecei é com uma entidade GasStation
class GasStation
int gasAtStation;
int gasToMoveToNextStationNeeded;
string nameOfGasStation;
GasTation wheretoStart(List<GasStation> list)
{
}
Fiz assim:
static void Main(string[] args)
{
int[] gasOnStation = {1, 2, 0, 4};
int[] gasDrivingCostTonNextStation = {1, 1,2, 1};
FindStartingPoint(gasOnStation, gasDrivingCostTonNextStation);
}
static void FindStartingPoint(int[] gasOnStation, int[] gasDrivingCosts)
{
// Assume gasOnStation.length == gasDrivingCosts.length
int n = gasOnStation.Length;
int[] gasEndValues = new int[n];
int gasValue = 0;
for (int i = 0; i < n; i++)
{
gasEndValues[i] = gasValue;
gasValue += gasOnStation[i];
gasValue -= gasDrivingCosts[i];
}
if (gasValue < 0)
{
Console.WriteLine("Instance does not have a solution");
Console.ReadLine();
}
else
{
// Find the minimum in gasEndValues:
int minI = 0;
int minEndValue = gasEndValues[0];
for (int i = 1; i < n; i++)
{
if (gasEndValues[i] < minEndValue)
{
minI = i;
minEndValue = gasEndValues[i];
}
}
Console.WriteLine("Start at station: " + minI);
Console.ReadLine();
}
}
Obrigad