Quiero hacer una variación de obtener el subarreglo máximo de leetcode en el que también recopile todo el subarreglo máximo, pero parece que no puedo entender lo que me estoy perdiendo.
var maxSubArray = function(nums) { let currSum = 0; let maxSum = -Infinity; let currArray = []; let maxArray = []; for (let i = 0; i < nums.length; i++) { currSum += nums[i]; if (Math.max(currSum, maxSum) != maxSum) { maxArray = currArray; maxSum = currSum; currArray.push(nums[i]); } maxSum = Math.max(currSum, maxSum); if (currSum < 0) { currSum = 0; currArray = [] } } console.log(maxArray); return maxSum; };Reconozco por qué esto es incorrecto, ya que el valor currSum no puede tener un componente negativo porque siempre sería una suma menor que la maxSum actual. Pero no estoy seguro de qué condición requeriría para esto. Siento que me estoy perdiendo algo obvio pero no puedo pensar en ello :(
Input: nums = [-2,1,-3,4,-1,2,1,-5,4] Output: 6 Explanation: [4,-1,2,1] has the largest sum = 6.Lo estaba haciendo de manera incorrecta ya que estaba almacenando una matriz cuando podría haber almacenado el índice.
var maxSubArray = function(nums) { let currSum = 0; let maxSum = -Infinity; let prevMax = -Infinity; let start = 0; let end = 0; for (let i = 0; i < nums.length; i++) { currSum += nums[i]; if (nums[i] > maxSum) { start = i; } if (Math.max(currSum, maxSum) != maxSum) { maxSum = currSum; end = i; } if (currSum < 0) { currSum = 0; if (nums[i+1] != undefined) { start = i+1; } } } console.log(start, end); console.log(nums.slice(start, end+1)) return maxSum; };