Javascript Program for Largest Sum Contiguous Subarray
Last Updated :
30 Aug, 2024
Write an efficient program to find the sum of contiguous subarray within a one-dimensional array of numbers that has the largest sum.

Kadane's Algorithm:
Initialize:
max_so_far = INT_MIN
max_ending_here = 0
Loop for each element of the array
(a) max_ending_here = max_ending_here + a[i]
(b) if(max_so_far < max_ending_here)
max_so_far = max_ending_here
(c) if(max_ending_here < 0)
max_ending_here = 0
return max_so_far
Explanation:
The simple idea of Kadane's algorithm is to look for all positive contiguous segments of the array (max_ending_here is used for this). And keep track of maximum sum contiguous segment among all positive segments (max_so_far is used for this). Each time we get a positive-sum compare it with max_so_far and update max_so_far if it is greater than max_so_far
Lets take the example:
{-2, -3, 4, -1, -2, 1, 5, -3}
max_so_far = max_ending_here = 0
for i=0, a[0] = -2
max_ending_here = max_ending_here + (-2)
Set max_ending_here = 0 because max_ending_here < 0
for i=1, a[1] = -3
max_ending_here = max_ending_here + (-3)
Set max_ending_here = 0 because max_ending_here < 0
for i=2, a[2] = 4
max_ending_here = max_ending_here + (4)
max_ending_here = 4
max_so_far is updated to 4 because max_ending_here greater
than max_so_far which was 0 till now
for i=3, a[3] = -1
max_ending_here = max_ending_here + (-1)
max_ending_here = 3
for i=4, a[4] = -2
max_ending_here = max_ending_here + (-2)
max_ending_here = 1
for i=5, a[5] = 1
max_ending_here = max_ending_here + (1)
max_ending_here = 2
for i=6, a[6] = 5
max_ending_here = max_ending_here + (5)
max_ending_here = 7
max_so_far is updated to 7 because max_ending_here is
greater than max_so_far
for i=7, a[7] = -3
max_ending_here = max_ending_here + (-3)
max_ending_here = 4
Program:
JavaScript
// JavaScript program to find maximum
// contiguous subarray
// Function to find the maximum
// contiguous subarray
function maxSubArraySum(a, size) {
let maxint = Math.pow(2, 53)
let max_so_far = -maxint - 1
let max_ending_here = 0
for (let i = 0; i < size; i++) {
max_ending_here = max_ending_here + a[i]
if (max_so_far < max_ending_here)
max_so_far = max_ending_here
if (max_ending_here < 0)
max_ending_here = 0
}
return max_so_far
}
// Driver code
let a = [-2, -3, 4, -1, -2, 1, 5, -3]
console.log("Maximum contiguous sum is",
maxSubArraySum(a, a.length))
// This code is contributed by AnkThon
OutputMaximum contiguous sum is 7
Another approach:
JavaScript
function maxSubarraySum(arr, size) {
let max_ending_here = 0, max_so_far = Number.MIN_VALUE;
for (let i = 0; i < size; i++) {
// Include current element to previous subarray only
// when it can add to a bigger number than itself.
if (arr[i] <= max_ending_here + arr[i]) {
max_ending_here += arr[i];
}
// Else start the max subarray from current element
else {
max_ending_here = arr[i];
}
if (max_ending_here > max_so_far) {
max_so_far = max_ending_here;
}
}
return max_so_far;
}
// Example usage:
const arr = [-2, -3, 4, -1, -2, 1, 5, -3];
const size = arr.length;
const result = maxSubarraySum(arr, size);
console.log("Maximum subarray sum is:", result);
OutputMaximum subarray sum is: 7
Complexity Analysis:
Time Complexity: O(n)
Algorithmic Paradigm: Dynamic Programming
Following is another simple implementation suggested by Mohit Kumar. The implementation handles the case when all numbers in the array are negative.
JavaScript
// print largest
// contiguous array sum
function maxSubArraySum(a, size) {
let max_so_far = a[0];
let curr_max = a[0];
for (let i = 1; i < size; i++) {
curr_max = Math.max(a[i], curr_max + a[i]);
max_so_far = Math.max(max_so_far, curr_max);
}
return max_so_far;
}
// Driver code
let a = [-2, -3, 4, -1, -2, 1, 5, -3];
let n = a.length;
console.log("Maximum contiguous sum is ", maxSubArraySum(a, n));
OutputMaximum contiguous sum is 7
To print the subarray with the maximum sum, we maintain indices whenever we get the maximum sum.
JavaScript
// javascript program to print largest
// contiguous array sum
function maxSubArraySum(a, size) {
let max_so_far = Number.MIN_VALUE;
let max_ending_here = 0, start = 0, end = 0, s = 0;
for (i = 0; i < size; i++) {
max_ending_here += a[i];
if (max_so_far < max_ending_here) {
max_so_far = max_ending_here;
start = s;
end = i;
}
if (max_ending_here < 0) {
max_ending_here = 0;
s = i + 1;
}
}
console.log("Maximum contiguous sum is " + max_so_far);
console.log("Starting index " + start);
console.log("Ending index " + end);
}
// Driver code
let a = [-2, -3, 4, -1, -2, 1, 5, -3];
let n = a.length;
maxSubArraySum(a, n);
// This code is contributed by Rajput-Ji
OutputMaximum contiguous sum is 7
Starting index 2
Ending index 6
Kadane's Algorithm can be viewed both as a greedy and DP. As we can see that we are keeping a running sum of integers and when it becomes less than 0, we reset it to 0 (Greedy Part). This is because continuing with a negative sum is way more worse than restarting with a new range. Now it can also be viewed as a DP, at each stage we have 2 choices: Either take the current element and continue with previous sum OR restart a new range. These both choices are being taken care of in the implementation.
Complexity Analysis:
- Time Complexity: O(n)
- Auxiliary Space: O(1)
Now try the below question:
Given an array of integers (possibly some elements negative), write a C program to find out the *maximum product* possible by multiplying 'n' consecutive integers in the array where n ≤ ARRAY_SIZE. Also, print the starting point of the maximum product subarray.
Please refer complete article on Largest Sum Contiguous Subarray for more details!
Similar Reads
Range query for Largest Sum Contiguous Subarray Given an array a[] of size N, and Q queries of two types 1 and 2. For the given query of: Type 1: given l and r (they are positions), and task is to print the Largest sum Contiguous Subarray Type 2: given type, index, and value, update aindex = value. Examples: Input: a[] = {-2, -3, 4, -1, -2, 1, 5,
15+ min read
Largest sum contiguous increasing subarray Given an array of n positive distinct integers. The problem is to find the largest sum of contiguous increasing subarray in O(n) time complexity. Examples : Input : arr[] = {2, 1, 4, 7, 3, 6}Output : 12Contiguous Increasing subarray {1, 4, 7} = 12Input : arr[] = {38, 7, 8, 10, 12}Output : 38Recommen
15 min read
K-th Largest Sum Contiguous Subarray Given an array arr[] of size n, the task is to find the kth largest sum of contiguous subarray within the array of numbers that has both negative and positive numbers.Examples: Input: arr[] = [20, -5, -1], k = 3Output: 14Explanation: All sum of contiguous subarrays are (20, 15, 14, -5, -6, -1), so t
15+ min read
Largest Sum Contiguous Subarray having unique elements Given an array arr[] of N positive integers, the task is to find the subarray having maximum sum among all subarrays having unique elements and print its sum. Input arr[] = {1, 2, 3, 3, 4, 5, 2, 1}Output: 15Explanation:The subarray having maximum sum with distinct element is {3, 4, 5, 2, 1}.Therefor
15+ min read
Smallest sum contiguous subarray Given an array containing n integers. The problem is to find the sum of the elements of the contiguous subarray having the smallest(minimum) sum.Examples: Input: arr[] = {3, -4, 2, -3, -1, 7, -5}Output: -6Explanation: Subarray with minimum sum is {-4, 2, -3, -1} = -6Input: arr = {2, 6, 8, 1, 4}Outpu
7 min read
Largest sum contiguous subarray having only non-negative elements Given an integer array arr[], the task is to find the largest sum contiguous subarray of non-negative elements and return its sum. Examples: Input: arr[] = {1, 4, -3, 9, 5, -6} Output: 14 Explanation: Subarray [9, 5] is the subarray having maximum sum with all non-negative elements. Input: arr[] = {
8 min read
Javascript Program for Size of The Subarray With Maximum Sum An array is given, find length of the subarray having maximum sum.Examples : Input : a[] = {1, -2, 1, 1, -2, 1}Output : Length of the subarray is 2Explanation: Subarray with consecutive elements and maximum sum will be {1, 1}. So length is 2Input : ar[] = { -2, -3, 4, -1, -2, 1, 5, -3 }Output : Leng
2 min read
Largest sum contiguous subarray by adding S exactly at K different positions Given an array arr[] of length N, the task is to find the largest sum contiguous subarray by adding an integer S exactly at K different positions in the array for every K from [0, N]. Examples: Input: arr[] = {4, 1, 3, 2}, S = 2Output: 10 12 14 16 18Explanation:For k = 0, the sum of the array it sel
10 min read
Javascript Program for Queries to find maximum sum contiguous subarrays of given length in a rotating array Given an array arr[] of N integers and Q queries of the form {X, Y} of the following two types: If X = 1, rotate the given array to the left by Y positions.If X = 2, print the maximum sum subarray of length Y in the current state of the array. Examples:Â Input: N = 5, arr[] = {1, 2, 3, 4, 5}, Q = 2,
5 min read
Largest sum subarray of size K containing consecutive elements Given an array arr[] consisting of N positive integers and a positive integer K, the task is to find the maximum sum of the subarray of size K such that it contains K consecutive elements in any combination. Examples: Input: arr[] = {10, 12, 9, 8, 10, 15, 1, 3, 2}, K = 3Output: 27Explanation:The sub
8 min read