Maximize the sum of sum of the Array by removing end elements

Given an array arr of size N, the task is to maximize the sum of sum, of the remaining elements in the array, by removing the end elements.
Example:
Input: arr[] = {2, 3}
Output: 3
Explanation:
At first we will delete 2, then sum of remaining elements = 3. Then delete 3. Therefore sum of sum = 3 + 0 = 3.
We can also delete 3 first and then 2, but in this case, the sum of sum = 2 + 0 = 2
But since 3 is larger, therefore the output is 3.
Input: arr[] = {3, 1, 7, 2, 1}
Output: 39
Explanation:
At first we will delete 1 from last, then the sum of remaining elements
will be 13.
Then delete 2 from last, then the sum of remaining elements will be 11.
Then delete 3 from the beginning, then the sum of remaining elements will be 8.
Then we delete 1, the remaining sum is 7 and then delete 7.
Therefore the Sum of all remaining sums is 13 + 11 + 8 + 7 = 39, which is the maximum case.
Approach: The idea is to use Greedy Algorithm to solve this problem.
- First to calculate the total sum of the array.
- Then compare the elements on both ends and subtract the minimum value among the two, from the sum. This will make the remaining sum maximum.
- Then, add remaining sum to the result.
- Repeat the above steps till all the elements have been removed from the array. Then print the resultant sum.
Below is the implementation of the above approach:
C++
// C++ program to maximize the sum// of sum of the Array by// removing end elements#include <iostream>using namespace std;// Function to find// the maximum sum of sumint maxRemainingSum(int arr[], int n){ int sum = 0; // compute the sum of whole array for (int i = 0; i < n; i++) sum += arr[i]; int i = 0; int j = n - 1; int result = 0; // Traverse and remove the // minimum value from an end // to maximum the sum value while (i < j) { // If the left end element // is smaller than right end if (arr[i] < arr[j]) { // remove the left end element sum -= arr[i]; i++; } // If the right end element // is smaller than left end else { // remove the right end element sum -= arr[j]; j--; } // Add the remaining element // sum in the result result += sum; } // Return the maximum // sum of sum return result;}// Driver codeint main(){ int arr[] = { 3, 1, 7, 2, 1 }; int N = sizeof(arr) / sizeof(arr[0]); cout << maxRemainingSum(arr, N); return 0;} |
Java
// Java program to maximize the sum// of sum of the Array by removing// end elementsimport java.util.*;class GFG{ // Function to find// the maximum sum of sumstatic int maxRemainingSum(int arr[], int n){ int sum = 0; // Compute the sum of whole array for(int i = 0; i < n; i++) sum += arr[i]; int i = 0; int j = n - 1; int result = 0; // Traverse and remove the // minimum value from an end // to maximum the sum value while (i < j) { // If the left end element // is smaller than right end if (arr[i] < arr[j]) { // Remove the left end element sum -= arr[i]; i++; } // If the right end element // is smaller than left end else { // Remove the right end element sum -= arr[j]; j--; } // Add the remaining element // sum in the result result += sum; } // Return the maximum // sum of sum return result;}// Driver codepublic static void main(String args[]){ int arr[] = { 3, 1, 7, 2, 1 }; int N = arr.length; System.out.println(maxRemainingSum(arr, N));}}// This code is contributed by ankitkumar34 |
Python3
# Python3 program to maximize the # sum of sum of the Array by # removing end elements# Function to find the maximum# sum of sumdef maxRemainingSum(arr, n): sum = 0 # Compute the sum of whole array for i in range(n): sum += arr[i] i = 0 j = n - 1 result = 0 # Traverse and remove the # minimum value from an end # to maximum the sum value while (i < j): # If the left end element # is smaller than right end if (arr[i] < arr[j]): # Remove the left end element sum -= arr[i] i += 1 # If the right end element # is smaller than left end else: # Remove the right end element sum -= arr[j] j -= 1 # Add the remaining element # sum in the result result += sum; # Return the maximum # sum of sum return result# Driver codearr = [ 3, 1, 7, 2, 1 ]N = len(arr)print(maxRemainingSum(arr, N))# This code is contributed by ankitkumar34 |
C#
// C# program to maximize the sum// of sum of the Array by removing// end elementsusing System;class GFG{ // Function to find// the maximum sum of sumstatic int maxRemainingSum(int[] arr, int n){ int i, sum = 0; // Compute the sum of whole array for(i = 0; i < n; i++) sum += arr[i]; i = 0; int j = n - 1; int result = 0; // Traverse and remove the // minimum value from an end // to maximum the sum value while (i < j) { // If the left end element // is smaller than right end if (arr[i] < arr[j]) { // Remove the left end element sum -= arr[i]; i++; } // If the right end element // is smaller than left end else { // Remove the right end element sum -= arr[j]; j--; } // Add the remaining element // sum in the result result += sum; } // Return the maximum // sum of sum return result;}// Driver codepublic static void Main(){ int[] arr = { 3, 1, 7, 2, 1 }; int N = arr.Length; Console.Write(maxRemainingSum(arr, N));}}// This code is contributed by chitranayal |
Javascript
<script>// Javascript program to maximize the sum// of sum of the Array by// removing end elements// Function to find// the maximum sum of sumfunction maxRemainingSum(arr, n){ var sum = 0; // compute the sum of whole array for (var i = 0; i < n; i++) sum += arr[i]; var i = 0; var j = n - 1; var result = 0; // Traverse and remove the // minimum value from an end // to maximum the sum value while (i < j) { // If the left end element // is smaller than right end if (arr[i] < arr[j]) { // remove the left end element sum -= arr[i]; i++; } // If the right end element // is smaller than left end else { // remove the right end element sum -= arr[j]; j--; } // Add the remaining element // sum in the result result += sum; } // Return the maximum // sum of sum return result;}// Driver codevar arr = [ 3, 1, 7, 2, 1 ];var N = arr.length;document.write( maxRemainingSum(arr, N));</script> |
39
Time complexity: O(N), where N is the size of the given array.
Auxiliary space: O(1), as constant space is used.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!



