以 C++ 中至少 X 和最多 Y 大小的子数组为最大平均值
问题陈述
给定一个数组 arr[] 和两个整数 X 和 Y。任务是用至少 X 和最多 Y 的大小找到具有最大平均值的一个子数组
示例
如果输入数组为 {2, 10, 15, 7, 8, 4},x = 3 且 Y = 3,则我们可以得到最大平均值 12.5,如下所示−
(10 + 15) / 2 = 12.5
算法
- 从大小从 X 开始到 Y 大小的每个子数组进行迭代,并在所有此类子数组中找到最大平均值。
- 为了降低时间复杂度,我们可以使用前缀和数组以 O(1) 的复杂度获取任何子数组的和
示例
现在让我们看一个例子−
#include <bits/stdc++.h> using namespace std; double getMaxAverage(int *arr, int n, int x, int y) { int prefix[n]; prefix[0] = arr[0]; for (int i = 1; i < n; ++i) { prefix[i] = prefix[i - 1] + arr[i]; } double maxAverage = 0; for (int i = 0; i < n; ++i) { for (int j = i + x - 1; j < i + y && j < n; ++j) { double sum = prefix[j]; if (i > 0) { sum = sum - prefix[i - 1]; double current = sum / double(j - i + 1); maxAverage = max(maxAverage,current); } } } return maxAverage; } int main() { int arr[] = {2, 10, 15, 7, 8, 4}; int x = 2; int y = 3; int n = sizeof(arr) / sizeof(arr[0]); cout << "Maximum average = " << getMaxAverage(arr, n, x, y) << endl; return 0; }
输出
Maximum average = 12.5
广告