diemax / learning

Our infinite learning journey
1 stars 0 forks source link

Greater element array #2

Open diemax opened 5 years ago

diemax commented 5 years ago

Hola @noiarek !

Este es un problema super simple, aun no mire soluciones de otros, al parecer la mia es O(n) Y por lo que vi es la forma mas standard de hacerlo 😅 Que te parece? Gracias 💚



function greaterElement(arr) {
    let greater = arr[0];

    for (index = 0; index <= arr.length; index++) {
        if (arr[index] > greater) {
            greater = arr[index];
        }
    }

    return greater;
}

console.log(greaterElement([1, 2, 3, 4, 5])); // 5
console.log(greaterElement([1, 2, 8, 10, 5])); //10
iamrodrigo commented 5 years ago

La solucion es O(n) por que el array esta desordenado, entonces hay que recorrer el array completamente si o si. Tiene un muy pequeno error tu algoritmo

En vez de

for (index = 0; index <= arr.length; index++) {

es

for (index = 0; index < arr.length; index++) {

Basicamente tiene que ser menor en vez de menor igual. Ahora, en vez de tener un if, yo tendria una funcion nativa como max

function greaterElement(arr) {
    let greater = arr[0];

    for (index = 0; index < arr.length; index++) {
        greater = Math.max(arr[index], greater);
    }

    return greater;
}

Inclusive podrias reducirlo mas haciendo esto

array1 = [1, 2, 8, 10, 5]
Math.max(...array1)

Pero en si el algoritmo es correcto ;) Bien ahi por saber que es O(n)! Requiere bastante experiencia empezar a reconocer el orden de las funciones

diemax commented 5 years ago

Ah si, tenes razón, tiene que ser index < arr.length Con la function Math.max podes incluso usar apply Un buen truco que aprendí para recordar como se diferencian call y apply es asociando la primer letra con el tipo de argumento, por ejemplo:

call means comma separated arguments apply means array of arguments

Entonces el codigo por si no tenes soporte para hacer array spread sería:

Math.max.apply(null, array1);

Gracias de nuevo! 😄 Voy a ponerme a buscar una buena lista de problemas con arrays, incluido sort algorithms