Open In App

Find the Maximum possible Sum for the given conditions

Given an array arr[] of size N, the task is to find the maximum possible sum of the array by following the given conditions: 

Examples:  



Input: arr = {6, 6, 6} 
Output: 15 
Explanation: 
Initially, the total sum is 0. Since all the elements are equal, any one element is chosen. 
Sum after choosing the first six = 6. Remaining elements = {5, 5}. 
Sum after choosing the five = 11. Remaining elements = {4}. 
Finally, four is chosen making the maximum sum 15. 

Input: arr = {0, 1, 0} 
Output:
Explanation: 
Initially, the total sum is 0. There is only one number that can be chosen in the array because rest of the elements are 0. 
Therefore, the maximum sum = 1. 
 



Approach: Since the value of all the other elements gets reduced by 1, clearly, we get the maximum sum if we choose the maximum element at every iteration. Therefore, in order to do this, sorting is used. 

Below is the implementation of the above approach:  




// C++ program to find the maximum
// possible Sum for the given conditions
#include<bits/stdc++.h>
using namespace std;
 
// Function to find the maximum
// possible sum for the
// given conditions
int maxProfit(int arr[], int n)
{
     
    // Sorting the array
    sort(arr, arr + n, greater<int>());
 
    // Variable to store the answer
    int ans = 0;
 
    // Iterating through the array
    for(int i = 0; i < n; i++)
    {
        
       // If the value is greater than 0
       if ((arr[i] - (1 * i)) > 0)
           ans += (arr[i] - (1 * i));
        
       // If the value becomes 0
       // then break the loop because
       // all the weights after this
       // index will be 0
       if ((arr[i] - (1 * i)) == 0)
           break;
    }
     
    // Print profit
    return ans;
}
 
// Driver code
int main()
{
    int arr[] = {6, 6, 6};
    int n = sizeof(arr) / sizeof(arr[0]);
     
    cout << maxProfit(arr, n);
    return 0;
}
 
// This code is contributed by ankitkumar34




// Java program to find the maximum
// possible Sum for the given conditions
import java.util.Arrays;
import java.util.Collections;
 
public class GFG{
 
    // Function to find the maximum
    // possible sum for the
    // given conditions
    static int maxProfit(Integer [] arr)
    {
         
        // Sorting the array
        Arrays.sort(arr, Collections.reverseOrder());
     
        // Variable to store the answer
        int ans = 0;
     
        // Iterating through the array
        for(int i = 0; i < arr.length; i++)
        {
     
           // If the value is greater than 0
           if ((arr[i] - (1 * i)) > 0)
               ans += (arr[i] - (1 * i));
     
           // If the value becomes 0
           // then break the loop because
           // all the weights after this
           // index will be 0
           if ((arr[i] - (1 * i)) == 0)
               break;
        }
         
        // Print profit
        return ans;
    }
     
// Driver code
public static void main(String[] args)
{
    Integer arr[] = { 6, 6, 6 };
    System.out.println(maxProfit(arr));
}
}
 
// This code is contributed by AnkitRai01




# Python3 program to find the maximum
# possible Sum for the given conditions
 
# Function to find the maximum
# possible sum for the
# given conditions
def maxProfit(arr):
     
    # Sorting the array
    arr.sort(reverse = True)
 
    # Variable to store the answer
    ans = 0
 
    # Iterating through the array
    for i in range(len(arr)):
 
        # If the value is greater than 0
        if (arr[i]-(1 * i))>0:
            ans+=(arr[i]-(1 * i))
 
        # If the value becomes 0
        # then break the loop because
        # all the weights after this
        # index will be 0
        if (arr[i]-(1 * i))== 0:
            break
 
    # print profit
    return ans   
 
# Driver code
if __name__ == "__main__":
  
    arr = [6, 6, 6]
 
    print(maxProfit(arr))
  




// C# program to find the maximum
// possible Sum for the given conditions
using System;
 
class GFG{
 
// Function to find the maximum
// possible sum for the
// given conditions
static int maxProfit(int[] arr)
{
         
    // Sorting the array
    Array.Sort(arr);
    Array.Reverse(arr);
     
    // Variable to store the answer
    int ans = 0;
     
    // Iterating through the array
    for(int i = 0; i < arr.Length; i++)
    {
        
       // If the value is greater than 0
       if ((arr[i] - (1 * i)) > 0)
           ans += (arr[i] - (1 * i));
        
       // If the value becomes 0
       // then break the loop because
       // all the weights after this
       // index will be 0
       if ((arr[i] - (1 * i)) == 0)
           break;
    }
         
    // Print profit
    return ans;
}
     
// Driver code
static public void Main ()
{
    int[] arr = { 6, 6, 6 };
     
    Console.Write(maxProfit(arr));
}
}
 
// This code is contributed by Shubhamsingh10




<script>
 
// Javascript program to find the maximum
// possible Sum for the given conditions
 
// Function to find the maximum
// possible sum for the
// given conditions
function maxProfit(arr)
{
     
    // Sorting the array
    arr.sort();
    arr.reverse();
 
    // Variable to store the answer
    let ans = 0;
 
    // Iterating through the array
    for(let i = 0; i < arr.length; i++)
    {
         
        // If the value is greater than 0
        if ((arr[i] - (1 * i)) > 0)
            ans += (arr[i] - (1 * i));
         
        // If the value becomes 0
        // then break the loop because
        // all the weights after this
        // index will be 0
        if ((arr[i] - (1 * i)) == 0)
            break;
    }
 
    // Print profit
    return ans;
}
 
// Driver code
let arr = [ 6, 6, 6 ];
   
document.write(maxProfit(arr));
 
// This code is contributed by divyesh072019
 
</script>

Output: 
15

 

Time Complexity: O(n*log(n))
Auxiliary Space: O(1)


Article Tags :