Mô tả bài toán
Cho mảng nums và số k. Tìm mảng con liên tiếp độ dài k có trung bình cộng lớn nhất.
Ví dụ: [1,13,-5,-8,48,3], k=4 → Mảng con [13,-5,-8,48] trung bình = 12.0.
Giải pháp (Cửa sổ trượt kích thước cố định)
- Tính tổng
kphần tử đầu. - Trượt cửa sổ: trừ phần tử đi ra, cộng phần tử vào, cập nhật max.
- Trả về
maxSum / k.
Ví dụ minh họa
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
double findMaxAverage(vector<int>& nums, int k) {
int sum = 0;
for (int i = 0; i < k; i++) sum += nums[i];
double maxi = sum;
for (int i = k; i < nums.size(); i++) {
sum += nums[i] - nums[i - k];
if (sum > maxi) maxi = sum;
}
return maxi / k;
}
};
int main() {
Solution ob;
vector<int> v = {1,13,-5,-8,48,3};
cout << ob.findMaxAverage(v, 4);
return 0;
}
Đầu vào
{1,13,-5,-8,48,3}, 4
Đầu ra
12