
- C++ Basics
- C++ Home
- C++ Overview
- C++ Environment Setup
- C++ Basic Syntax
- C++ Comments
- C++ Data Types
- C++ Variable Types
- C++ Variable Scope
- C++ Constants/Literals
- C++ Modifier Types
- C++ Storage Classes
- C++ Operators
- C++ Loop Types
- C++ Decision Making
- C++ Functions
- C++ Numbers
- C++ Arrays
- C++ Strings
- C++ Pointers
- C++ References
- C++ Date & Time
- C++ Basic Input/Output
- C++ Data Structures
- C++ Object Oriented
- C++ Classes & Objects
- C++ Inheritance
- C++ Overloading
- C++ Polymorphism
- C++ Abstraction
- C++ Encapsulation
- C++ Interfaces
Maximum subarray sum in O(n) using prefix sum in C++
Problem statement
Given an Array of Positive and Negative Integers, find out the Maximum Subarray Sum in that Array
Example
If input array is − {-12, -5, 4, -1, -7, 1, 8, -3} then output is 9
Algorithm
Calculate the prefix sum of the input array.
Initialize− min_prefix_sum = 0, res = -infinite
Maintain a loop for i = 0 to n. (n is the size of the input array).
cand = prefix_sum[i] – mini
If cand is greater than res (maximum subarray sum so far), then update res by cand.
If prefix_sum[i] is less than min_prefix_sum (minimum prefix sum so far), then update min_prefix_sum by prefix_sum[i].
Return res
Example
#include <bits/stdc++.h> using namespace std; int maximumSumSubarray(int *arr, int n){ int minPrefixSum = 0; int res = numeric_limits<int>::min(); int prefixSum[n]; prefixSum[0] = arr[0]; for (int i = 1; i < n; i++) { prefixSum[i] = prefixSum[i - 1] + arr[i]; } for (int i = 0; i < n; i++) { res = max(res, prefixSum[i] - minPrefixSum); minPrefixSum = min(minPrefixSum, prefixSum[i]); } return res; } int main(){ int arr[] = {-12, -5, 4, -1, -7, 1, 8, -3}; int n = sizeof(arr) / sizeof(arr[0]); cout << "Result = " << maximumSumSubarray(arr, n) <<endl; return 0; }
Output
When you compile and execute above program. It generates following output −
Result = 9
- Related Articles
- Maximum circular subarray sum in C++\n
- Maximum subarray sum in circular array using JavaScript
- C++ Program to find the maximum subarray sum O(n^2) time (naive method)
- Maximum Sum SubArray using Divide and Conquer in C++
- Maximum Sum Circular Subarray in C++
- Maximum sum bitonic subarray in C++
- Maximum Subarray Sum using Divide and Conquer algorithm in C++
- Maximum subarray sum modulo m in C++
- Maximum contiguous sum of subarray in JavaScript
- Program to find maximum ascending subarray sum using Python
- Using Kadane’s algorithm to find maximum sum of subarray in JavaScript
- Maximum Subarray Sum with One Deletion in C++
- Maximum Size Subarray Sum Equals k in C++
- Find Maximum Sum Strictly Increasing Subarray in C++
- Maximum Subarray Sum Excluding Certain Elements in C++

Advertisements