Aquí hay una solución que se ejecuta en O (2 ^ N)
función minimalSum (arr, k) {
let minSoFar = Number.MAX_SAFE_INTEGER,
hasSolution = false
- En entrevistas tecnológicas, ¿cómo podemos escribir un código que sea limpio, conciso, optimizado en tiempo y espacio y que cubra todos los casos básicos y de borde de una vez?
- ¿De dónde obtienen la mayoría de los entrevistadores sus preguntas de entrevistas técnicas de informática?
- ¿Qué tan importante es la codificación rápida en una entrevista técnica?
- ¿Cuál es la complejidad temporal de este código para encontrar líderes en una matriz?
- ¿Cuáles son las preguntas de diseño que se hacen en las entrevistas de SDE en compañías tecnológicas en los Estados Unidos?
const f = (índice, suma) => {
if (index> = arr.length) {
regreso
}
const currentVal = sum + arr [índice]
const withVal = currentVal,
sin valor = suma
if (withVal k) {
minSoFar = withVal
hasSolution = true
}
if (sin Val k) {
minSoFar = sin valor
hasSolution = true
}
f (índice + 1, conVal)
f (índice + 1, sin Val)
}
f (0, 0)
volver hasSolution? minSoFar: -1
}
console.log (minimalSum ([1, 2, 5, 3, 4, 1], 7))
La idea es cada paso en el camino, puede elegir incluir arr [i] o no incluirlo.
También es posible resolver esto con programación dinámica, aunque todavía no he podido reconocer una relación de recurrencia.