在 C++ 中查找数组中每隔 K 个元素的最大和


在这个问题中,我们给定一个数组 arr[] 和一个整数 k。我们的任务是查找数组中每隔 K 个元素的最大和。

问题描述:我们需要找到数组元素的最大和,这些元素的索引相隔 k 个。即我们需要最大化以下和,

sum = arr[i] + arr[i+k] + arr[i + 2*k] + …. arr[i + p*k],其中 (i + p*k) < n

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

输入

arr[] = {5, 3, −1, 2, 4, −5, 6}, k = 4

输出

9

解释

All sums of every kth element is
5 + 4 = 9
3 − 5 = −2
−1 + 6 = 5
2
4
−5
6
The maximum is 9

解决方案方法

解决这个问题的一个简单方法是使用两个嵌套循环,外部循环用于数组的每个元素,内部循环用于查找从 i 开始每隔 k 个元素的和。即 sum = arr[i] + arr[i + k] + arr[i + 2*k] + … + arr[i + p*k],其中 (i + p*k) < n。

并返回最大和。

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

示例

 在线演示

#include <iostream>
using namespace std;
int findMaxSumK(int arr[], int n, int K){
   int maxSum = -1000;
   for (int i = 0; i < n; i++) {
      int current_Sum = 0;
      for (int j = i; j < n; j += K)
         current_Sum = current_Sum + arr[j];
         maxSum = max(maxSum, current_Sum);
   }
   return maxSum;
}
int main(){
   int arr[] = {5, 3, -1, 2, 4, -5, 6};
   int n = sizeof(arr) / sizeof(arr[0]);
   int K = 3;
   cout<<"The maximum sum taking every Kth element in the array is
   "<<findMaxSumK(arr, n, K);
   return (0);
}

输出

The maximum sum taking every Kth element in the array is 13

程序说明解决方案的工作原理,

示例

 在线演示

#include <iostream>
using namespace std;
int findMaxSumK(int arr[], int n, int K) {
   int maxSum = -1000;
   int suffSum[n] = {0};
   for (int i = n - 1; i >= 0; i--) {
      if (i + K < n)
         suffSum[i] = suffSum[i + K] + arr[i];
      else
         suffSum[i] = arr[i];
         maxSum = max(maxSum, suffSum[i]);
   }
   return maxSum;
}
int main(){
   int arr[] = {5, 3, -1, 2, 4, -5, 6};
   int n = sizeof(arr) / sizeof(arr[0]);
   int K = 3;
   cout<<"The maximum sum taking every Kth element in the array is
   "<<findMaxSumK(arr, n, K);
   return (0);
}

输出

The maximum sum taking every Kth element in the array is 13

更新于: 2021年3月12日

193 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告