File tree Expand file tree Collapse file tree 1 file changed +71
-0
lines changed
Expand file tree Collapse file tree 1 file changed +71
-0
lines changed Original file line number Diff line number Diff line change 1+ // max circular subarray sum problem
2+
3+ #include < bits/stdc++.h>
4+
5+ using namespace std ;
6+
7+ class Solution {
8+
9+ public:
10+ int kadalgo (int arr[],int n){
11+ int currsum = 0 ;
12+ int maxsum = 0 ;
13+ for (int i=0 ;i<n;i++){
14+ currsum+=arr[i];
15+ if (currsum<0 ){
16+ currsum=0 ;
17+ }
18+ maxsum=max (maxsum,currsum);
19+ }
20+ return maxsum;
21+ }
22+
23+ int circularSubarraySum (int arr[], int num){
24+ int nonwrapsum = kadalgo (arr,num);
25+ if (!nonwrapsum){
26+ int maxsum=-10e6 ;
27+ for (int i=0 ;i<num;i++){
28+ maxsum = max (arr[i],maxsum);
29+ }
30+
31+ return maxsum;
32+ }
33+
34+ int totalsum = 0 ;
35+
36+ for (int i=0 ;i<num;i++){
37+ totalsum+=arr[i];
38+ arr[i] = -arr[i];
39+ }
40+
41+ int wrapsum = totalsum + kadalgo (arr,num);
42+
43+ return max (wrapsum,nonwrapsum);
44+ }
45+ };
46+
47+ int main (){
48+
49+ int T;
50+ cin>>T;
51+
52+ while (T--){
53+
54+ int num;
55+ cin>>num;
56+
57+ int arr[num];
58+
59+ for (int i=0 ;i<num;i++){
60+ cin>>arr[i];
61+ }
62+
63+ Solution ob;
64+
65+ cout<<ob.circularSubarraySum (arr,num)<<endl;
66+
67+ }
68+
69+ return 0 ;
70+
71+ }
You can’t perform that action at this time.
0 commit comments