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
热门推荐
10 财运虎年祝福语简短语
11 单亲爸爸春节祝福语简短
12 狗狗上厕所训练
13 植物种植祝福语简短
14 翻译考试祝福语朋友简短
15 个人周年庆简短祝福语
16 狗狗怎么训练
17 分别祝福语简短搞笑英文
18 生日广州男生祝福语简短