Skip to content

Commit 049486b

Browse files
committed
Added solution for Maximum Sum Subarray
1 parent 0ab8ca2 commit 049486b

File tree

3 files changed

+73
-1
lines changed

3 files changed

+73
-1
lines changed

AlgorithmsDesignExamples.pro

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ SUBDIRS += \
44
InsertionSort \
55
SelectionSort \
66
MergeSort \
7-
BinarySearch
7+
BinarySearch \
8+
MaximumSubarray
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
TEMPLATE = app
2+
CONFIG += console c++11
3+
CONFIG -= app_bundle
4+
CONFIG -= qt
5+
6+
SOURCES += \
7+
main.cpp

MaximumSubarray/main.cpp

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
#include <iostream>
2+
using namespace std;
3+
4+
int maximumSubarray(int* arr, int start, int end);
5+
void printArray(int* arr, int n);
6+
7+
int main()
8+
{
9+
int arr[9] = {-4, 5, -2, -2, 6, -4, 3, -4, 4};
10+
printArray(arr, 9);
11+
int max = maximumSubarray(arr, 0, 8);
12+
cout << "Max sum subarray: " << max << endl;
13+
return 0;
14+
}
15+
16+
int maximumSubarray(int *arr, int start, int end)
17+
{
18+
if (start == end)
19+
return arr[start];
20+
21+
int mid = (start + end) / 2;
22+
int l = maximumSubarray(arr, start, mid);
23+
int r = maximumSubarray(arr, mid + 1, end);
24+
25+
int maxLeft;
26+
int temp = 0;
27+
bool flag = true; //checks if maxLeft is initialized
28+
29+
for (int i = mid; i >= start; i--)
30+
{
31+
temp += arr[i];
32+
if (flag || temp > maxLeft)
33+
maxLeft = temp;
34+
flag = false;
35+
}
36+
37+
temp = 0;
38+
flag = true;
39+
int maxRight;
40+
for (int i = mid + 1; i <= end; i++)
41+
{
42+
temp += arr[i];
43+
if (flag || temp > maxRight)
44+
maxRight = temp;
45+
flag = false;
46+
}
47+
48+
if (l >= r && l >= (maxLeft + maxRight))
49+
return l;
50+
if (r >= l && r >= (maxLeft + maxRight))
51+
return r;
52+
return maxLeft + maxRight;
53+
}
54+
55+
void printArray(int *arr, int n)
56+
{
57+
for (int i = 0; i < n; i++)
58+
{
59+
if (i)
60+
cout << ", ";
61+
cout << arr[i];
62+
}
63+
cout << endl;
64+
}

0 commit comments

Comments
 (0)