10 KiB
title | localeTitle |
---|---|
Where Do I Belong | Dónde pertenezco |
Recuerda usar Read-Search-Ask
si te atascas. Tratar de emparejar el programa y escribe tu propio código
Explicación del problema:
Esto puede ser un problema difícil de entender. Debe encontrar en qué lugar de la matriz se debe insertar un número por orden y devolver el índice a donde debe ir.
Enlaces relevantes
Sugerencia: 1
Lo primero que debe hacer es ordenar la matriz de menor a mayor, solo para facilitar el código. Aquí es donde entra la ordenación, necesita una función de devolución de llamada, por lo que debe crearla.
intenta resolver el problema ahora
Sugerencia: 2
Una vez que la matriz esté ordenada, solo busque el primer número que sea más grande y devuelva el índice.
intenta resolver el problema ahora
Sugerencia: 3
Si no hay un índice para ese número, también tendrá que lidiar con ese caso.
intenta resolver el problema ahora
¡Alerta de spoiler!
¡Solución por delante!
Solución de código básico:
function getIndexToIns(arr, num) {
arr.sort(function(a, b) {
return a - b;
});
for (var a = 0; a < arr.length; a++) {
if (arr[a] >= num)
return a;
}
return arr.length;
}
Explicación del código:
- Primero,
.sort(callbackFuntion)
la matriz utilizando.sort(callbackFuntion)
para clasificarla de menor a mayor, de izquierda a derecha. - Luego uso un bucle for para comparar los elementos de la matriz a partir del más pequeño. Cuando un elemento de la matriz es mayor que el número con el que comparamos, devolvemos el índice como un entero.
Enlaces relevantes
Solución de código básico:
function getIndexToIns(arr, num) {
// Find my place in this sorted array.
var times = arr.length; // runs the for loop once for each thing in the array
var count = 0;
for (var i=0;i<times;i++){
if(num>arr[i]){count++;} } // counts how many array numbers are smaller than num
return count; // the above equals num's position in a sorted array
}
getIndexToIns([40, 60], 50);
Explicación del código:
- No ordeno la matriz de entrada arr
- Ejecuto un recuento de bucles for cuando la entrada num es más grande que un número de entrada arr.
- Este número es equivalente a la posición de num que estaría en una matriz ordenada.
Solución de código básico:
por @HarinaPana
function getIndexToIns(arr, num) {
arr.sort(function(a, b) {
return a - b;
});
var i = 0;
while (num > arr[i]) {
i++;
}
return i;
}
getIndexToIns([40, 60], 50);
Explicación del código:
- Ordenar la matriz existente.
- Iterar a través de la matriz mientras se comprueba si num es más grande.
- El bucle se detendrá cuando num no sea mayor que i y devolverá el último elemento marcado.
Solución de código intermedio:
por @faustodc
function getIndexToIns(arr, num) {
arr.push(num);
arr.sort(function(a, b){return ab});
return arr.indexOf(num);
}
Explicación del código:
- Primero agregamos el número
num
a la matriz usandopush()
que lo agrega como el último elemento de la matriz. - Luego usamos
sort()
con la función defunction(a, b){return ab}
devolución de llamadafunction(a, b){return ab}
para ordenar los números en orden ascendente. - Finalmente, devolvemos la posición o el índice de
num
en la matriz con la funciónindexOf()
.
Enlaces relevantes
Solución de código intermedio:
Utilizando .findIndex()
function getIndexToIns(arr, num) {
// sort and find right index
var index = arr.sort((curr, next) => curr > next)
.findIndex((currNum)=> num <= currNum);
// Returns proper answer
return index === -1 ? arr.length : index;
}
getIndexToIns([40, 60], 500);
Explicación del código:
- Primero ordene la matriz en orden ascendente, esto se hace actualmente usando funciones de matriz para una huella mínima.
- Una vez que la matriz está ordenada, aplicamos directamente el
.findIndex()
donde vamos a comparar cada elemento de la matriz hasta que encontremos dondenum <= currNum
significa que el número que queremos insertar es menor o igual al número actual Número en la iteración. - Luego usamos operaciones ternarias para verificar si obtuvimos un índice devuelto o
-1
. Sólo tenemos-1
cuando no se encontró el índice es decir, cuando tenemos una falsa para todos los elementos que int matriz, y para tal caso, eso significaría quenum
debe insertarse al final de la lista, por tanto, por qué usamosarr.length
.
Enlaces relevantes
Solución avanzada de código:
por @nivrith
function getIndexToIns(arr, num) {
return arr.concat(num).sort((a,b) => ab).indexOf(num);
}
getIndexToIns([1,3,4],2);
Explicación del código:
- Utilizamos el encadenamiento de métodos para invocar un método tras otro para resolver el problema en una sola línea. Primero fusionamos
arr
ynum
invocando el método arr.concat (num) - Luego usamos
sort()
con la función de flecha de devolución de llamada(a, b) => return ab
para ordenar los números en orden ascendente - Por último, devolvemos la posición o el índice de
num
en la matriz con el métodoindexOf()
Enlaces relevantes
NOTAS PARA LAS CONTRIBUCIONES:
- NO agregue soluciones que sean similares a las soluciones existentes. Si cree que es similar pero mejor , intente fusionar (o reemplazar) la solución similar existente.
- Agregue una explicación de su solución.
- Categorice la solución en una de las siguientes categorías: Básica , Intermedia y Avanzada .
- Agregue su nombre de usuario solo si ha agregado algún contenido principal relevante . ( NO elimine ningún nombre de usuario existente )
Ver
Wiki Challenge Solution Template
para referencia.