# Maximum subarray

JavaScript, Algorithm, Math, Array · Sep 7, 2022 Finds a contiguous subarray with the largest sum within an array of numbers.

• Use a greedy approach to keep track of the current `sum` and the current maximum, `maxSum`. Set `maxSum` to `-Infinity` to make sure that the highest negative value is returned, if all values are negative.
• Define variables to keep track of the maximum start index, `sMax`, maximum end index, `eMax` and current start index, `s`.
• Use `Array.prototype.forEach()` to iterate over the values and add the current value to the `sum`.
• If the current `sum` is greater than `maxSum`, update the index values and the `maxSum`.
• If the `sum` is below `0`, reset it to `0` and update the value of `s` to the next index.
• Use `Array.prototype.slice()` to return the subarray indicated by the index variables.
```const maxSubarray = (...arr) => {
let maxSum = -Infinity,
sum = 0;
let sMax = 0,
eMax = arr.length - 1,
s = 0;

arr.forEach((n, i) => {
sum += n;
if (maxSum < sum) {
maxSum = sum;
sMax = s;
eMax = i;
}

if (sum < 0) {
sum = 0;
s = i + 1;
}
});

return arr.slice(sMax, eMax + 1);
};```
`maxSubarray(-2, 1, -3, 4, -1, 2, 1, -5, 4); // [4, -1, 2, 1]`

### Written by Angelos Chalaris

I'm Angelos Chalaris, a JavaScript software engineer, based in Athens, Greece. The best snippets from my coding adventures are published here to help others learn to code.

If you want to keep in touch, follow me on GitHub.

## More like this

• ### JavaScript Math

A snippet collection of math helpers and algorithms implemented in JavaScript.

Collection · 95 snippets

• ### Heap sort

Sorts an array of numbers, using the heapsort algorithm.

JavaScript, Algorithm · Dec 28, 2020

• ### Bucket sort

Sorts an array of numbers, using the bucket sort algorithm.

JavaScript, Algorithm · Dec 29, 2020

• ### Quick sort

Sorts an array of numbers, using the quicksort algorithm.

JavaScript, Algorithm · Oct 13, 2021