Max Circular Subarray Sum

Tags : array, geeksforgeeks, cpp, hard

Given an array arr[] of N integers arranged in a circular fashion. Your task is to find the maximum contiguous subarray sum.

.

Your Task: The task is to complete the function circularSubarraySum() which returns a sum of the circular subarray with maximum sum.

Expected Time Complexity: O(N).
Expected Auxiliary Space: O(1).

Examples #

Example 1:

Input:
N = 7
arr[] = {8,-8,9,-9,10,-11,12}
Output:
22
Explanation:
Starting from the last element
of the array, i.e, 12, and 
moving in a circular fashion, we 
have max subarray as 12, 8, -8, 9, 
-9, 10, which gives maximum sum 
as 22.

Example 2:

Input:
N = 8
arr[] = {10,-3,-4,7,6,5,-4,-1}
Output:
23
Explanation: Sum of the circular 
subarray with maximum sum is 23

Constraints #

Solutions #

class Solution
{
    public:
    // arr: input array
    // num: size of array
    //Function to find maximum circular subarray sum.
    int maxSubarraySum(int arr[], int num){
        int cur = arr[0], res=arr[0];
        for(int i=1; i<num; i++){
            cur = max(arr[i], cur+arr[i]);
            res = max(res, cur);
        }
        return res;
    }    
    int circularSubarraySum(int arr[], int num){
        
        // your code here
        int linear = maxSubarraySum(arr, num);
        if(linear < 0)
            return linear;
        int cur = 0;
        for(int i=0; i<num; i++){
            cur += arr[i];
            arr[i] *= -1;
        }
        int circular = cur + maxSubarraySum(arr, num);
        return max(linear, circular);
    }
};