C ++中每次访问后最大减量时数组的最大值
在此问题中,给我们一个数组arr[]和一个整数M。我们的任务是创建一个程序,以在C++中每次访问后最大减量时从数组中查找最大值。
问题描述
为了找到最大值,我们将从数组中找到最大值,并在每次检索之后将其减小-1(M次)。
让我们举个例子来了解这个问题,
输入:arr[]={3,6,8,9}M=2
数量:17
说明
第一次迭代,最大值=9,总和=9,更新的arr={3,6,8,8}
第2次迭代,最大值=8,总和=9+8=17,更新的arr={3,6,7,8}
解决方法
一个简单的解决方案是使用max堆,该堆将在根目录具有max元素。然后弹出根,将其减小1,然后再次插入元素。弹出并插入M次。对于每个弹出操作,我们将元素添加到sum元素,并在M次迭代后打印总和。
示例
#include <bits/stdc++.h>
using namespace std;
int getSum(int arr[], int N, int M) {
   int sumVal = 0;
   priority_queue<int> heap;
   for (int i = 0; i < N; i++)
      heap.push(arr[i]);
   while (M--) {
      int maximumVal = heap.top();
      sumVal += maximumVal;
      heap.pop();
      heap.push(maximumVal - 1);
   }
   return sumVal;
}
int main() {
   int arr[] = { 3, 6, 8, 9};
   int M = 2;
   int N = sizeof(arr) / sizeof(arr[0]);
   cout<<"The maximum from array when the maximum decrements after every access is "<<getSum(arr, N,M);
}输出结果
The maximum from array when the maximum decrements after every access is 17