Aprendizaje de algoritmos C ++ (Likou: 134. Gasolinera)

Hay N gasolineras en una carretera de circunvalación y la i-ésima gasolinera tiene gasolina de [i] litros.

Tiene un automóvil con un tanque de combustible ilimitado Conducir desde la estación de servicio i-ésima a la estación de servicio i + 1-ésima requiere un costo de [i] litros de gasolina. Empiezas desde una de las estaciones de servicio y el tanque de gasolina está vacío al principio.

Si puede dar la vuelta al circuito, devuelva el número de la estación de servicio cuando comenzó; de lo contrario, devuelva -1.

Descripción:

Si la pregunta tiene solución, esa respuesta es la única respuesta.
Las matrices de entrada son todas matrices no vacías y tienen la misma longitud.
Los elementos de la matriz de entrada son todos números no negativos.
Ejemplo 1:

输入: 
gas  = [1,2,3,4,5]
cost = [3,4,5,1,2]

输出: 3

解释:3 号加油站(索引为 3)出发,可获得 4 升汽油。此时油箱有 = 0 + 4 = 4 升汽油
开往 4 号加油站,此时油箱有 4 - 1 + 5 = 8 升汽油
开往 0 号加油站,此时油箱有 8 - 2 + 1 = 7 升汽油
开往 1 号加油站,此时油箱有 7 - 3 + 2 = 6 升汽油
开往 2 号加油站,此时油箱有 6 - 4 + 3 = 5 升汽油
开往 3 号加油站,你需要消耗 5 升汽油,正好足够你返回到 3 号加油站。
因此,3 可为起始索引。

Ejemplo 2:

输入: 
gas  = [2,3,4]
cost = [3,4,3]

输出: -1

解释:
你不能从 0 号或 1 号加油站出发,因为没有足够的汽油可以让你行驶到下一个加油站。
我们从 2 号加油站出发,可以获得 4 升汽油。 此时油箱有 = 0 + 4 = 4 升汽油
开往 0 号加油站,此时油箱有 4 - 3 + 2 = 3 升汽油
开往 1 号加油站,此时油箱有 3 - 3 + 3 = 3 升汽油
你无法返回 2 号加油站,因为返程需要消耗 4 升汽油,但是你的油箱只有 3 升汽油。
因此,无论怎样,你都不可能绕环路行驶一周。

Fuente: LeetCode (LeetCode)
Enlace: https://leetcode-cn.com/problems/gas-station
Copyright es propiedad de LeetCode . Para reimpresiones comerciales, comuníquese con la autorización oficial. Para reimpresiones no comerciales, indique la fuente.
Solución del problema personal: El propósito de este problema es encontrar si el aceite es suficiente hasta el final, entonces necesitamos juzgar dos puntos: 1. El aceite total puede correr hasta el final, esta es una solución. 2. Si hay una solución, comience a buscar la primera solución.

class Solution {
    
    
public:
    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
    
    
      int gas_min_cost = 0;//总油数量
      int start = 0; //起始位置
      int num = 0;  //每次的数
      for(int i = 0;i < gas.size();i++){
    
    
      num += (gas[i] - cost[i]);
      gas_min_cost +=(gas[i] - cost[i]);
      if(num < 0){
    
    
       start = i+1;
       num = 0;   
      }
      }
     if(gas_min_cost <0 ) return -1;
      return start;
    }
};

Supongo que te gusta

Origin blog.csdn.net/weixin_45743162/article/details/109779868
Recomendado
Clasificación