Estoy tratando de resolver un problema de tipo leetcode que es un problema de práctica que vino con una próxima prueba de código que necesito hacer para un trabajo y tengo problemas con eso. ¿Alguien puede ayudarme a entender qué está pasando mal?
Básicamente, estoy buscando la opción de fuerza bruta ya que no conozco algos/DS.
PROBLEM:Escribe una función:
solución de la función (A);
que, dada una matriz A de N enteros, devuelve el entero positivo más pequeño (mayor que 0) que no aparece en A.
Por ejemplo, dado A = [1, 3, 6, 4, 1, 2], la función debería devolver 5.
Dado A = [1, 2, 3], la función debería devolver 4.
Dado A = [−1, −3], la función debería devolver 1.
Escriba un algoritmo eficiente para las siguientes suposiciones:
N es un número entero dentro del rango [1..100,000]; cada elemento de la matriz A es un número entero dentro del rango [−1,000,000..1,000,000].
HERE IS MY SOLUTION: function solution(A) { let newArray = A.sort(function(a, b){return ab}) let lowestNumber = 1 for(i=0; i < newArray.length; i++) { if(lowestNumber > newArray[0]) { return lowestNumber } if(lowestNumber == newArray[i]) { lowestNumber = lowestNumber + 1 } if(i = newArray.length - 1) { return lowestNumber } } }El siguiente fragmento no funciona como esperaba. el número más bajo no se está aumentando y también el ciclo está saliendo aquí, creo.
if(lowestNumber == newArray[i]) { lowestNumber = lowestNumber + 1¡Gracias por tu ayuda!
Creo que su > debería ser < , y el = en if(i = newArray.length - 1) debería ser === .
Y lowestNumber > newArray[0] siempre será verdadero si la matriz contiene un número negativo, por lo que se devolverá 1 .
Su esfuerzo parece descuidado, por lo que tendrá que mejorar su juego para la entrevista.
const integers = [5, -345, 562456, 95345, 4, 232, 1, 2, 3, 7, -457]; function solution(A) { let newArray = A.sort((a, b) => a - b); let lowestNumber = 1; for (let i = 0; i < newArray.length; i++) { const n = newArray[i]; if (n > 0) { if (lowestNumber < n) { return lowestNumber; } else { lowestNumber = n + 1; } } } return lowestNumber; } console.log(solution(integers));Puedes hacer esto en O(N) usando Map() :
function solution(arr) { const seen = new Map(); for (let i = 0; i < arr.length; i++) { seen.set(arr[i]); } for (let i = 1; i <= arr.length + 1; i++) { if (!seen.has(i)) return i; } return 1; } console.log(solution([1, 3, 6, 4, 1, 2])); //-> 5 console.log(solution([1, 2, 3])); //-> 4 console.log(solution([-1, -3])); //-> 1La solución más rápida
function solution(A) { // write your code in JavaScript (Node.js 8.9.4) if (!A) return 1; A.sort(); if (A[A.length - 1] < 1) return 1; const setA = new Set(A); let length = setA.size; for (let i = 1; i <= length; i++) { if (!setA.has(i)) { return i; } } return length + 1; }