hacer la ruta circular completa, el ejercicio de ruta más corta?

Recibí esta pregunta en una entrevista y no pude resolverla.

Tiene una carretera circular, con N número de estaciones de servicio. Conoces la cantidad de gas que tiene cada estación. Usted sabe la cantidad de gas que necesita para IR de una estación a la siguiente. Su automóvil comienza con 0 gasolina. La pregunta es: cree un algoritmo para saber desde qué estación de servicio debe comenzar a conducir para COMPLETAR la RUTA circular. No especifica que debe visitar todas las estaciones. Solo puede conducir en sentido horario.

Tuve que hacerlo en c #

El único código que comencé es con una entidad de GasStation

class GasStation
  int gasAtStation;
  int gasToMoveToNextStationNeeded;
  string nameOfGasStation;


GasTation wheretoStart(List<GasStation> list)
{

}

Lo hice de esta manera:

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

Gracia

Respuestas a la pregunta(8)

Su respuesta a la pregunta