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".
Usa el pensamiento límite para comprender.
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