Javascript Algorithm Maximum Subarray
Solution 1:
max=-2 sum=-2
loop arr[1]=1: sum = max( -2 + 1, 1) = 1, max = max( sum=1 , max=-2 ) = 1
max=1 sum=1
loop arr[2]=-3: sum = max( 1 + -3, -3) = -2, max = max( sum=-2, max=1 ) = 1
max=1 sum=-2
loop arr[3]=4: sum = max( -3 + 4, 4) = 4, max = max( sum=4, max=1 ) = 4
max=4 sum=4
loop arr[4]=-1: sum = max( 4 + -1, -1) = 3, max = (3,4) = 4
max=4 sum=3
loop arr[5]=2: sum = max( 3 + 2, 2) = 5, max = max(5,4) = 5
So the iteration looks like this:
arr [-2, 1, -3, 4, -1, 2, 1, -5, 4] sum x, 1, x, 4, 3, 5, 6, 1, 5 max -2, 1, 1, 4, 4, 5, 6, 6, 6
It's like finding progressive sums, discarding negative sequences or starting off a new sequence when sum is negative, because any negative sequence would contribute negatively to the total sum of a sequence.
And, you use max = Math.max(max, sum), (set max to what's bigger, current max value or current sum) to find the largest value reached in the progressive sums (which is 6). This also accounts for edge case of all negatives, where the maximal sum will be the largest negative number.
const givenArray = [-2, 1, -3, 4, -1, 2, 1, -5, 4];
constgetMax = arr => {
let sum = arr[0]; //-2let max = arr[0]; //-2for (let i = 1; i < arr.length; i++) {
sum = Math.max(sum + arr[i], arr[i]);
max = Math.max(max, sum);
console.log(`max=${max}`, `sum=${sum}`);
}
};
getMax(givenArray);
Post a Comment for "Javascript Algorithm Maximum Subarray"