在 C++ 中找出最大长度为 k 的平均子数组
在这个问题中,我们给定一个大小为 n 的数组 arr[],其中包含正值和负值,以及一个整数 k。我们的任务是找到长度为 k 的最大平均子数组。
让我们举个例子来理解这个问题,
输入:arr[] = {4, -1, 5, 6, -2, 4} k = 3
输出:10
说明:
大小为 3 的子数组中最大和为 -1、5、6 = 10
解决方案方法
这个问题的解决方案是使用一个辅助阵列来存储数组中到当前索引为止的累积和。
要找出子数组的和,我们需要计算子数组位置索引之间的差值。
程序说明我们解决方案的工作原理:
示例
#include<bits/stdc++.h> using namespace std; int findMaxSubArrayAverage(int arr[], int n, int k) { if (k > n) return -1; int *auxSumArray = new int[n]; auxSumArray[0] = arr[0]; for (int i=1; i<n; i++) auxSumArray[i] = auxSumArray[i-1] + arr[i]; int maxSum = auxSumArray[k-1], subEndIndex = k-1; for (int i=k; i<n; i++) { int sumVal = auxSumArray[i] - auxSumArray[i-k]; if (sumVal > maxSum) { maxSum = sumVal; subEndIndex = i; } } return subEndIndex - k + 1; } int main() { int arr[] = {4, -1, 5, 6, -2, 4}; int k = 3; int n = sizeof(arr)/sizeof(arr[0]); cout<<"The maximum average subarray of length "<<k<<" begins at index "<<findMaxSubArrayAverage(arr, n, k); return 0; }
输出
The maximum average subarray of length 3 begins at index 1
广告