Usa el pensamiento límite para romper 134. Gasolinera - Algoritmo LeetCode

Tema: 134. Gasolinera

Hay n gasolineras en un bucle, y la i-ésima gasolinera tiene gas[i] litros de gasolina.
Usted tiene un automóvil con una capacidad de tanque de combustible ilimitada, y se necesitan [i] litros de gasolina para conducir desde la i-ésima estación de servicio hasta la i+1-ésima estación de servicio. Comienzas desde una de las estaciones de servicio, comenzando con un tanque vacío.
Dadas dos matrices de enteros gas y costo, devuelva el número de la estación de servicio en el momento de la salida si puede viajar alrededor del círculo; de lo contrario, devuelva -1. Si existe una solución, se garantiza que es única.

Ejemplo 1:
Entrada: gas = [1,2,3,4,5], costo = [3,4,5,1,2]
Salida: 3
Explicación:
A partir de la gasolinera No. 3 (en el índice 3), Consigue 4 litros de gasolina. En este momento, el tanque de combustible tiene = 0 + 4 = 4 litros de gasolina
. Vaya a la gasolinera No. 4. En este momento, el tanque de combustible tiene 4 - 1 + 5 = 8 litros de gasolina.
Vaya a la No. 0 gasolinera En este momento, el tanque de combustible tiene 8 - 2 + 1 = 7 litros de gasolina Vaya
a la gasolinera No. 1, en este momento el tanque de combustible tiene 7 - 3 + 2 = 6 litros de gasolina
Vaya a la gasolinera No. 1 Gasolinera 2, en este momento el tanque de combustible tiene 6 - 4 + 3 = 5 litros de gasolina
Vaya a la gasolinera No. 3, necesita 5 litros de gasolina, lo suficiente para regresar a la gasolinera #3.
Por lo tanto, 3 puede ser el índice inicial.

Ejemplo 2:
Entrada: gasolina = [2,3,4], costo = [3,4,3]
Salida: -1
Explicación:
No puede comenzar desde la estación de servicio 0 o 1 porque no hay suficiente gasolina para usted Conduzca hasta la próxima gasolinera.
Partimos de la gasolinera 2 y obtenemos 4 litros de gasolina. En este momento, el tanque de combustible tiene = 0 + 4 = 4 litros de gasolina
. Vaya a la gasolinera No. 0, en este momento, el tanque de combustible tiene 4 - 3 + 2 = 3 litros de gasolina.
Vaya a la No. 1 gasolinera, en este momento, el tanque de combustible tiene 3 - 3 + 3 = 3 Litros de gasolina
No puedes volver a la gasolinera 2 porque el viaje de regreso lleva 4 litros de gasolina, pero tu tanque solo tiene 3 litros de gasolina .
Entonces, pase lo que pase, no puedes dar la vuelta al circuito.

Enlace: https://leetcode-cn.com/problems/gas-station

Entender y responder:

En cuanto a si es posible completar una vuelta, puede usar la forma de pensar del "modo extremo":
1. Si la suma de la matriz de gas combustible [] es infinitamente pequeña, y la matriz de costo de consumo de combustible [] suma infinitamente grande , entonces es imposible completar una vuelta. : (El auto se quedó sin gasolina a mitad de camino, así que no pude dar la vuelta e irme a casa, llorando ~); 2.
Si la cantidad de gasolina [] repostada es infinitamente grande, y la matriz de costo[] del consumo de combustible es infinitamente pequeña, entonces definitivamente puede completar un círculo (el automóvil usa una cantidad infinita de combustible para caminar en un círculo infinitamente pequeño, muy fácil ~).

De hecho, en muchos lugares donde el algoritmo es difícil de entender, puedes entenderlo en segundos usando "pensamiento extremo".
inserte la descripción de la imagen aquí
Usa el pensamiento límite para comprender.
inserte la descripción de la imagen aquí

class Solution {
    
    
    /**
       采用极限思维秒破 
     */
    public int canCompleteCircuit(int[] gas, int[] cost) {
    
    
        int gasSum = 0;
        int costSum = 0;
        
        for (int g = 0; g < gas.length; g++) {
    
    
            gasSum += gas[g];
        }
        for (int c = 0; c < cost.length; c++) {
    
    
            costSum += cost[c];
        }
        // 只要中间有一个无限大的路程,有限的油必然被耗光
        if (gasSum < costSum) {
    
    
            return -1;
        }

        // 上方不能走完圈,下方必然存在一个能走完圈的
        int restGas = 0; // 剩余油量
        int start = 0;
        for (int i = 0; i < gas.length; i++) {
    
    
            restGas = restGas + gas[i] - cost[i]; // 剩余油量+本站油量 - 下一段路程油耗
            if (restGas < 0) {
    
     // 没有办法到达下一站,那么就尝试将下一站作为起点,万一下一站有无限的油量呢~
                restGas = 0;
                start = i + 1; 
            }
        }
        return start;
    }
}
/**
    https://leetcode-cn.com/problems/gas-station/solution/tan-xin-dong-hua-tu-jie-dai-ma-jian-ji-b-na6b/
 */

Fuente de referencia:
https://leetcode-cn.com/problems/gas-station/solution/tan-xin-dong-hua-tu-jie-dai-ma-jian-ji-b-na6b/
https://xiaochen1024 .com/courseware/60b4f11ab1aa91002eb53b18/61963ce5c1553b002e57bf14

Supongo que te gusta

Origin blog.csdn.net/Xidian2850/article/details/123836764
Recomendado
Clasificación