在 C++ 中选择最大和 M 个元素,使得连续重复不超过 K


在这个问题中,我们给定一个数组 arr[] 和两个整数 M 和 K。我们的任务是使用给定数组的元素创建一个数组。新数组的大小应为 M,并且任何大小大于 K 的子数组都不能所有元素都相同。我们必须打印创建的数组可能的最大和。

让我们举个例子来理解这个问题

输入 − arr[] = {1, 2, 4, 5, 7 }, M = 5, K = 2

说明 − 创建满足条件的数组 {7, 7, 5, 7, 7}。这里,没有大小超过 2 的子数组的所有元素都相同。

为了解决这个问题,我们需要使用具有最大值的元素创建数组。但我们不能使用最大元素超过 k 次,因此 k 次之后,我们将不得不使用数组的第二大元素。在数组中每隔 k 个最大值插入一个第二大值,并创建一个长度为 M 的数组。最终输出将是此数组中所有元素的总和。

示例

程序演示了我们解决方案的实现,

 实时演示

#include <iostream>
using namespace std;
long int arraySum(int arr[], int n, int m, int k){
   int max1 = arr[0], max2 = arr[0];
   for (int i = 1; i < n; i++) {
      if (arr[i] > max1) {
         max2 = max1;
         max1 = arr[i];
      }
      else if (arr[i] > max2)
         max2 = arr[i];
   }
   int max2count = m / (k + 1);
   long int sum = max2count * max2 + (m - max2count) * max1;
   return sum;
}
int main() {
   int arr[] = { 1, 3, 6, 7, 4, 5 };
   int n = sizeof(arr) / sizeof(arr[0]);
   int m = 9, k = 2;
   cout<<"The maximum sum of array created from the given array such that no subarray of size greater    than "<<k<<" will have same elements is ";
   cout<<arraySum(arr, n, m, k);
   return 0;
}

输出

The maximum sum of array created from the given array such that no subarray of size greater than 2 will have same elements is 60

更新于: 2020-04-17

223 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告