Related Articles

# Maximums from array when the maximum decrements after every access

• Difficulty Level : Easy
• Last Updated : 25 Jun, 2021

Given an integer K and an array of integers arr, the task is to find the maximum element from the array and after every retrieval the number will get decremented by 1. Repeat these steps exactly K number of times and print the sum of all the values retrieved in the end.

Examples:

Input: K = 3, arr[] = {2, 3, 5, 4}
Output: 13
For K = 1, current maximum is 5 (Sum = 5 and arr[] = {2, 3, 4, 4})
For K = 2, current maximum is 4 (Sum = 5 + 4 = 9 and arr[] = {2, 3, 3, 4})
For K = 3, current maximum is 4 (Sum = 9 + 4 = 13 and arr[] = {2, 3, 3, 3})
Hence, the result is 13

Input: K = 4, arr[] = {1, 2, 4}
Output: 11

Approach: The main idea is to use a max heap which will have the maximum element at it’s root at any instance of time.

• Create a max heap of all the elements of the array.
• Get the root element of the heap and add it to the sum.
• Pop the root element and decrement it by 1 then insert it again into the heap.
• Repeat the above two steps exactly K number of times.
• Print the total sum in the end.

Below is the implementation of the above approach:

## C++

 `// C++ implementation of above approach``#include ``using` `namespace` `std;``#define ll long long` `ll getSum(``int` `arr[], ``int` `K, ``int` `n)``{``    ``ll sum = 0;``    ``priority_queue maxHeap;``    ``for` `(ll i = 0; i < n; i++) {` `        ``// put all array elements``        ``// in a max heap``        ``maxHeap.push(arr[i]);``    ``}` `    ``while` `(K--) {` `        ``// Get the current maximum element``        ``ll currentMax = maxHeap.top();` `        ``// Add it to the sum``        ``sum += currentMax;` `        ``// Remove the current max from the heap``        ``maxHeap.pop();` `        ``// Add the current max back to the``        ``// heap after decrementing it by 1``        ``maxHeap.push(currentMax - 1);``    ``}``    ``return` `sum;``}` `// driver code``int` `main()``{``    ``int` `arr[] = { 2, 3, 5, 4 }, K = 3;``    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr);``    ``cout << getSum(arr, K, n) << endl;``}`

## Java

 `// Java implementation of above approach``import` `java.util.*;``class` `Solution``{` `static` `int` `getSum(``int` `arr[], ``int` `K, ``int` `n)``{``    ``int` `sum = ``0``;``    ``PriorityQueue maxHeap =``                          ``new` `PriorityQueue(n,Collections.reverseOrder());``    ``for` `(``int` `i = ``0``; i < n; i++) {` `        ``// put aint array elements``        ``// in a max heap``        ``maxHeap.add(arr[i]);``    ``}` `    ``while` `(K-->``0``) {` `        ``// Get the current maximum element``        ``int` `currentMax = (``int``)maxHeap.peek();` `        ``// Add it to the sum``        ``sum += currentMax;` `        ``// Remove the current max from the heap``        ``maxHeap.remove();` `        ``// Add the current max back to the``        ``// heap after decrementing it by 1``        ``maxHeap.add(currentMax - ``1``);``    ``}``    ``return` `sum;``}` `// driver code``public` `static` `void` `main(String args[])``{``    ``int` `arr[] = { ``2``, ``3``, ``5``, ``4` `}, K = ``3``;``    ``int` `n =arr.length;``    ``System.out.println(getSum(arr, K, n));``}``}``//contributed by Arnab Kundu`

## Python3

 `# Python3 implementation of above approach``def` `getSum(arr, K, n) :``    ``Sum` `=` `0``    ``maxHeap ``=` `[]``    ``for` `i ``in` `range``(n) :``   ` `        ``# put all array elements``        ``# in a max heap``        ``maxHeap.append(arr[i])``     ` `    ``maxHeap.sort()``    ``maxHeap.reverse()``     ` `    ``while` `(K > ``0``) :``   ` `        ``# Get the current maximum element``        ``currentMax ``=` `maxHeap[``0``]``   ` `        ``# Add it to the sum``        ``Sum` `+``=` `currentMax``   ` `        ``# Remove the current max from the heap``        ``maxHeap.pop(``0``)``   ` `        ``# Add the current max back to the``        ``# heap after decrementing it by 1``        ``maxHeap.append(currentMax ``-` `1``)``        ``maxHeap.sort()``        ``maxHeap.reverse()``        ``K ``-``=` `1``    ` `    ``return` `Sum``    ` `arr ``=` `[ ``2``, ``3``, ``5``, ``4` `]``K ``=` `3``;``n ``=` `len``(arr)``print``(getSum(arr, K, n))` `#. This code is contributed by divyeshrabadiya07.`

## C#

 `// C# implementation of above approach``using` `System;``using` `System.Collections.Generic;``class` `GFG {`` ` `    ``static` `int` `getSum(``int``[] arr, ``int` `K, ``int` `n)``    ``{``        ``int` `sum = 0;``        ``List<``int``> maxHeap = ``new` `List<``int``>();``        ``for` `(``int` `i = 0; i < n; i++) {``      ` `            ``// put all array elements``            ``// in a max heap``            ``maxHeap.Add(arr[i]);``        ``}``        ` `        ``maxHeap.Sort();``        ``maxHeap.Reverse();``        ` `        ``while` `(K-- > 0) {``      ` `            ``// Get the current maximum element``            ``int` `currentMax = maxHeap;``      ` `            ``// Add it to the sum``            ``sum += currentMax;``      ` `            ``// Remove the current max from the heap``            ``maxHeap.RemoveAt(0);``      ` `            ``// Add the current max back to the``            ``// heap after decrementing it by 1``            ``maxHeap.Add(currentMax - 1);``            ``maxHeap.Sort();``            ``maxHeap.Reverse();``        ``}``        ``return` `sum;``    ``} ``    ` `  ``// Driver code``  ``static` `void` `Main()``  ``{``    ``int``[] arr = { 2, 3, 5, 4 };``    ``int` `K = 3;``    ``int` `n = arr.Length;``    ``Console.Write(getSum(arr, K, n));``  ``}``}` `// This code is contributed by divyesh072019.`

## Javascript

 ``
Output:
`13`

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

My Personal Notes arrow_drop_up