File tree Expand file tree Collapse file tree 1 file changed +35
-0
lines changed Expand file tree Collapse file tree 1 file changed +35
-0
lines changed Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public:
3
+ int maxSubarraySumCircular (vector<int >& nums) {
4
+ const int n = nums.size ();
5
+ vector<int > suffix (n);
6
+
7
+ suffix[n - 1 ] = nums[n - 1 ];
8
+ int suffix_sum = nums[n - 1 ];
9
+
10
+ for (int i = n - 2 ; i >= 0 ; i--) {
11
+ suffix_sum += nums[i];
12
+ suffix[i] = max (suffix[i + 1 ], suffix_sum);
13
+ }
14
+
15
+ int normalSum = nums[0 ];
16
+ int special_sum = nums[0 ];
17
+ int currSum = 0 ;
18
+ int prefixSum = 0 ;
19
+
20
+ for (int i = 0 ; i < n; ++i) {
21
+ // Kadane algo start
22
+ currSum += nums[i];
23
+ normalSum = max (normalSum, currSum);
24
+ if (currSum < 0 ){
25
+ currSum = 0 ;
26
+ }
27
+ // kadane algo end
28
+ prefixSum += nums[i];
29
+ if (i + 1 < n) {
30
+ special_sum = max (special_sum, prefixSum + suffix[i + 1 ]);
31
+ }
32
+ }
33
+ return max (normalSum, special_sum);
34
+ }
35
+ };
You can’t perform that action at this time.
0 commit comments