Estoy tomando una matriz de números [4, 6, 23, 10, 1, 3] Necesito devolver true si alguna combinación de números en la matriz se suma al número más grande de la matriz. Entonces, el ejemplo anterior debería ser true porque 3 + 4 + 6 + 10 = 23
Mi pensamiento detrás de este problema es que primero debería poner la matriz en orden numérico y luego hacer una nueva matriz solo con los números que estoy agregando porque no estoy agregando el número más grande. Entonces necesito algún método que diga "Si cualquier combinación de sumar estos números es igual al número más grande en la matriz original, devuelve verdadero". Este es el código que he escrito hasta ahora, pero estoy atascado en el bucle for. ¡Cualquier ayuda sería muy apreciada!
function ArrayChallenge(arr){ let order = arr.sort(function(a, b){return ab}) let addThese = order.slice(0,order.length-1) for(i = 0; i < addThese.length-1; i++){ return true } } console.log(ArrayChallenge([3,5,-1,8,12]))Parece una pregunta trampa. Aquí está la respuesta:
function ArrayChallenge(arr){ return true }Porque la suma del número más grande siempre es igual al número más grande.
Si esta solución no está permitida de alguna manera, vea el problema de la suma de subconjuntos :
hay un conjunto múltiple S de números enteros y una suma objetivo T, y la cuestión es decidir si algún subconjunto de números enteros suma precisamente T.
La solución más sencilla a ese problema es con recursividad; algo como esto:
function subsetSum(arr, sum) { if (arr.length == 0) { // No numbers left in the array. The only sum we can make is 0. // If that is the sum we are seeking, great! return sum == 0 } else { // We will try both using and not using the first number in the array. // The rest is passed to the recursive call. const [current, ...remaining] = arr return ( // Exclude current number, and recurse. We have to make the full // sum with the remaining numbers. subsetSum(remaining, sum) || // Include current number, meaning we have sum - current left // to make with the remaining numbers. subsetSum(remaining, sum - current) ) } }