在C ++中找到大小为k的子数组的最大(或最小)和

在这个问题中,我们得到了一个数组arr []和一个数字k。我们的任务是找到大小为k的子数组的最大(或最小)和。 

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

输入:  arr [] = {55,43,12,76,89,25,99},k = 2

输出:  165

解释:

大小为2的子数组的总和= 76 + 89 = 165

解决方法

解决该问题的一种简单方法是找到所有k个大小的子数组,然后返回具有最大值的和。

另一种方法 是使用滑动窗口, 我们将找到k个大小的子数组的总和。为此,接下来的k个大小的子数组,我们将减去最后一个索引元素,然后添加下一个索引元素。

然后返回带有最大值的子数组总和。 

该程序说明了我们解决方案的工作原理,

示例

#include <iostream>

using namespace std;

int findMaxSumSubarray(int arr[], int n, int k) {

   

   if (n < k) {

      cout << "Invalid";

      return -1;

   }

   int maxSum = 0;

   for (int i=0; i<k; i++)

      maxSum += arr[i];

   int curr_sum = maxSum;

   for (int i=k; i<n; i++) {

      curr_sum += arr[i] - arr[i-k];

      maxSum = max(maxSum, curr_sum);

   }

   return maxSum;

}

int main() {

   

   int arr[] = {55, 43, 12, 76, 89, 25, 99};

   int n = sizeof(arr)/sizeof(arr[0]);

   int k = 2;

   cout<<"最大大小总和的子数组总和 "<<k<<" is "<<findMaxSumSubarray(arr, n, k);

   return 0;

}

输出结果
最大大小总和的子数组总和 2 is 165

以上是 在C ++中找到大小为k的子数组的最大(或最小)和 的全部内容, 来源链接: utcz.com/z/342714.html

回到顶部