Repository navigation
Expand file tree
/
Copy pathMaximumSubArraySum.cpp
More file actions
118 lines (103 loc) · 2.21 KB
/
Copy pathMaximumSubArraySum.cpp
File metadata and controls
118 lines (103 loc) · 2.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/*
Program Name : Maximum Subarray sum
Program Description : Return Maximum sum possible in subarray
*/
#include <iostream>
using namespace std;
void display(vector<int> &arr)
{
for(auto x : arr)
{
cout << x << ' ';
}
cout << endl;
}
/*
1. Algorithm Used : Brute Force
Time Complexity : O(N^3)
Auxiliary Space Requirement : O(1)
Intuition : Generate all subarrays and find sum of each subarray
*/
int maxSubarraySum1(vector<int> &arr)
{
int maxSum = INT_MIN;
int n = arr.size();
for(int i=0; i<n; i++)
{
for(int j=i; j<n; j++)
{
int currSum = 0;
for(int k=i; k<=j; k++)
{
currSum += arr[k];
}
maxSum = max(currSum, maxSum);
}
}
return maxSum;
}
/*
2. Algorithm Used : Better
Time Complexity : O(N^2)
Auxiliary Space Requirement : O(1)
Intuition : Optimization of 1st algorithm
*/
int maxSubarraySum2(vector<int> &arr)
{
int maxSum = INT_MIN;
for(int i=0; i<arr.size(); i++)
{
int currSum = 0;
for(int j=i; j<arr.size(); j++)
{
currSum += arr[j];
if(currSum > maxSum)
{
maxSum = currSum;
}
}
}
return maxSum;
}
/*
2. Algorithm Used : Optimal - Kadane's Algorithm
Time Complexity : O(N)
Auxiliary Space Requirement : O(1)
Intuition : Choose only positive subarray sum for considering max. sum
*/
int maxSubarraySum3(vector<int> &arr)
{
int n = arr.size();
int maxSum = INT_MIN;
int currSum = 0;
// int start = -1, end = -1;
// int currStart = -1;
for(int i=0; i<n; i++)
{
// if(currSum == 0)
// {
// currStart = i;
// }
currSum += arr[i];
if(currSum > maxSum)
{
maxSum = currSum;
// start = currStart;
// end = i;
}
if(currSum < 0)
{
currSum = 0;
}
}
// vector<int> subArr(arr.begin()+start, arr.begin()+end+1);
// display(subArr);
return maxSum;
}
int main()
{
vector<int> arr = {-2,-3,4,-1,-2,1,5,-3};
display(arr);
cout << maxSubarraySum3(arr) << endl;
return 0;
}