# C / C++ Program for Largest Sum Contiguous Subarray

Write an efficient program to find the sum of contiguous subarray within a one-dimensional array of numbers which has the largest sum.

## Recommended: Please solve it on “__PRACTICE__ ” first, before moving on to the solution.

__PRACTICE__## C++

`// C++ program to print largest contiguous array sum` `#include <climits>` `#include <iostream>` `using` `namespace` `std;` ` ` `int` `maxSubArraySum(` `int` `a[], ` `int` `size)` `{` ` ` `int` `max_so_far = INT_MIN, max_ending_here = 0;` ` ` ` ` `for` `(` `int` `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 program to test maxSubArraySum*/` `int` `main()` `{` ` ` `int` `a[] = { -2, -3, 4, -1, -2, 1, 5, -3 };` ` ` `int` `n = ` `sizeof` `(a) / ` `sizeof` `(a[0]);` ` ` `int` `max_sum = maxSubArraySum(a, n);` ` ` `cout << ` `"Maximum contiguous sum is "` `<< max_sum;` ` ` `return` `0;` `}` |

**Output:**

Maximum contiguous sum is 7

Above program can be optimized further, if we compare max_so_far with max_ending_here only if max_ending_here is greater than 0.

## C++

`int` `maxSubArraySum(` `int` `a[], ` `int` `size)` `{` ` ` `int` `max_so_far = 0, max_ending_here = 0;` ` ` `for` `(` `int` `i = 0; i < size; i++) {` ` ` `max_ending_here = max_ending_here + a[i];` ` ` `if` `(max_ending_here < 0)` ` ` `max_ending_here = 0;` ` ` ` ` `/* Do not compare for all elements. Compare only ` ` ` `when max_ending_here > 0 */` ` ` `else` `if` `(max_so_far < max_ending_here)` ` ` `max_so_far = max_ending_here;` ` ` `}` ` ` `return` `max_so_far;` `}` |

Please refer complete article on Largest Sum Contiguous Subarray for more details!

Want to learn from the best curated videos and practice problems, check out the **C Foundation Course **for Basic to Advanced C.