Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ค่าเฉลี่ยสูงสุดของเซิร์บอาร์เรย์ I ใน C++

ปัญหา

สมมติว่าเรามีอาร์เรย์ที่มี n สมาชิก เราต้องหาเซิร์บอาร์เรย์ติดกันที่มีความยาว k ที่กำหนดซึ่งมีค่าเฉลี่ยสูงสุด เราต้องคืนค่าค่าเฉลี่ยสูงสุด

เช่น ถ้าผนวกเข้าเป็น [1,13,-5,-8,48,3] และ k = 4 ผลลัพธ์จะเป็น 12.0 เนื่องจาก (13-5-8+48)/4 = 12.0

วิธีแก้ปัญหา

  1. sum := 0
  2. for i := 0 ถึง k-1 ทำ: sum := sum + nums[i]
  3. maxi := sum
  4. for i := k ถึง ขนาดของ nums - 1 ทำ:
    • sum := sum + nums[i] - nums[i - k]
    • ถ้า sum > maxi: maxi := sum
  5. คืนค่า 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