Open In App

Google Interview Onsite (University Grad – 2020)

Last Updated : 21 Apr, 2020
Improve
Improve
Like Article
Like
Save
Share
Report

Question :Given an array having 2n elements you can choose n elements from either end of the array such that the values obtained result in maximum sum.

Examples:

Input : 1 3 100 25 20 4  
Output : 103 

Approach: Initially, I tried recursive approach by showing both possibilities of an element that it can either be included or excluded, but he told to optimize it and I came up with prefix sum approach.
Idea: The main idea behind the prefix sum approach was if we select ‘x’ elements from left we can select ‘n-x’ elements from the right.




int function(int arr[])
{
    Int n = arr.size();
    Int lpref[n], rpref[n]; // for left and right prefix sum
    Lpref[0] = arr[0], rpref[n - 1] = arr[n - 1];
    For(int i = 1; i < n; i++)
    {
        Lpref[i] = Lpref[i - 1] + arr[i];
    }
    For(int i = n - 2; i >= 0; i--)
    {
        rpref[i] = rpref[i + 1] + arr[i];
    }
    Int maxm = INT_MIN, m = n / 2;
    For(int i = 0; i < m - 1; i++)
    {
maxm =max(maxm, lpref[i]+rpref[n-1-i];
    }
    maxm = max(maxm, lpref[m - 1]);
    maxm = max(maxm, rpref[n - m]);
    return maxm;
}



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads