Hoy encontré una pregunta de algoritmo muy interesante. La siguiente es su descripción del algoritmo, que proviene de una pregunta de entrevista en Twitter.
Descripción del algoritmo de twitter buddles
Mira una imagen primero
Los números en la figura anterior se describen de acuerdo con el contenido de una matriz. Finalmente, la altura de una pared se simulará de acuerdo con el tamaño de cada número, y se generará una pared. Pregúntele, cuándo llueve, cuánta agua se puede llenar esta pared, en 1 como la unidad de conteo.
Aquí hay una pared después de llenar el agua
Después de leer la imagen de arriba, ¿crees que es divertido? De hecho, analicemos brevemente su implementación de algoritmo a continuación.
De hecho, este principio es relativamente simple, hay algunos puntos clave:
1. Definitivamente no hay agua en los lados izquierdo y derecho
2. La altura de la carga de agua depende del valor mínimo de los dos valores máximos en los lados izquierdo y derecho del uno mismo
Usemos JS para implementarlo simplemente:
La copia del código es la siguiente:
/**
* Calcule cuánta agua se puede instalar en la pared con términos de matriz como altura
* Ejemplo de matriz [2,5,1,2,3,4,7,7,6,9]
**/
function getwaterCounts (arg) {
var i = 0,
j = 0,
recuento = 0;
// tanto los elementos del primer y último elemento deben ser excluidos
para (i = 1; i <arg.length - 1; i ++) {
var izquierda = math.max.apply (null, arg.slice (0, i + 1));
var right = math.max.apply (null, arg.slice (i, arg.length));
var min = izquierda> = ¿Rectilegiado? Derecha: izquierda;
// prevalecerá el valor máximo de los lados izquierdo y derecho
// Si el valor actual es mayor o igual a este valor, no haga nada
if (arg [i] <min) {
count += min - arg [i];
}
}
console.log (cuenta);
}
getwatercounts ([2,5,1,2,3,4,7,7,6,9]); // 11
Resumir
Jeje, ¿no es la implementación bastante simple? De hecho, mientras esté dispuesto a pensar, puede usar JS para implementar muchas cosas divertidas.