Google Interview Onsite (University Grad – 2020)
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; } |
Contact Us