-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCircularSubarray_sum.cpp
47 lines (44 loc) · 970 Bytes
/
CircularSubarray_sum.cpp
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
#include <bits/stdc++.h>
using namespace std;
// Kadance Algorithm
int kadane(int arr[], int n)
{
int currentSum = 0;
int maxSum = INT_MIN;
for (int i = 0; i < n; i++)
{
currentSum += arr[i];
if (currentSum < 0)
{
currentSum = 0;
}
maxSum = max(maxSum, currentSum);
}
return maxSum;
}
// Main Fuction
int main()
{
// Input Array
int n;
cin >> n;
int arr[n];
for (int i = 0; i < n; i++)
{
cin >> arr[i];
}
int wrapsum, totalsum = 0;
int nonwrapsum;
nonwrapsum = kadane(arr, n);
for (int i = 0; i < n; i++)
{
totalsum += arr[i];
// reverse array elements sign
arr[i] = -arr[i];
}
// Max subarray sum = Total sum of array - sum of non-contributing elements
// wrapsum= totalsum - (-kadane(arr, n));
wrapsum = totalsum + kadane(arr, n);
cout << max(wrapsum, nonwrapsum) << endl;
return 0;
}