сделать полный круговой путь, упражнение по кратчайшему пути?

Я получил этот вопрос в интервью, и я не смог его решить.

У вас есть круговая дорога, с N количеством заправок. Вы знаете количество газа, которое есть на каждой станции. Вы знаете количество газа, которое вам нужно, чтобы перейти с одной станции на другую. Ваша машина начинается с 0 газа. Вопрос заключается в следующем: создайте алгоритм, чтобы узнать, с какой заправки вы должны начать движение, чтобы завершить круговой путь. Здесь не указано, что вы должны посещать все станции. Вы можете двигаться только по часовой стрелке.

Я должен был сделать это в C #

Единственный код, который я начал, связан с сущностью GasStation

class GasStation
  int gasAtStation;
  int gasToMoveToNextStationNeeded;
  string nameOfGasStation;


GasTation wheretoStart(List<GasStation> list)
{

}

Я сделал это так:

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

Спасибо

Ответы на вопрос(8)

Ваш ответ на вопрос