ปัญหา
สมมติว่าเรามีอาร์เรย์ที่มี n สมาชิก เราต้องหาเซิร์บอาร์เรย์ติดกันที่มีความยาว k ที่กำหนดซึ่งมีค่าเฉลี่ยสูงสุด เราต้องคืนค่าค่าเฉลี่ยสูงสุด
เช่น ถ้าผนวกเข้าเป็น [1,13,-5,-8,48,3] และ k = 4 ผลลัพธ์จะเป็น 12.0 เนื่องจาก (13-5-8+48)/4 = 12.0
วิธีแก้ปัญหา
- sum := 0
- for i := 0 ถึง k-1 ทำ: sum := sum + nums[i]
- maxi := sum
- for i := k ถึง ขนาดของ nums - 1 ทำ:
- sum := sum + nums[i] - nums[i - k]
- ถ้า sum > maxi: maxi := sum
- คืนค่า maxi / k
ตัวอย่างโค้ด C++
#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));
}
อินพุต
{1,13,-5,-8,48,3}, 4
เอาต์พุต
12