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