C++ 中的最大平均子数组 I


假设我们有一个包含 n 个元素的数组,我们需要找到长度为 k 的连续子数组,该子数组具有最大的平均值。我们需要返回最大的平均值。

因此,如果输入类似于 [1,13,-5,-8,48,3],且 k = 4,那么输出将为 12.0,因为 (13-5-8+48)/4 = 12.0。

为了解决这个问题,我们将遵循以下步骤 −

  • sum := 0

  • for 初始化 i := 0,当 i < k 时,更新(将 i 增加 1),执行 −

    • sum := sum + nums[i]

  • maxi := sum

  • for 初始化 i := k,当 i < nums 的大小时,更新(将 i 增加 1),执行 −

    • sum := sum + nums[i] - nums[i - k]

    • if sum > maxi,则 −

      • maxi := sum

  • return maxi / k

示例 

下面我们来看一下实现过程,以便加深理解 −

 演示

#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;
   }
};
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

更新时间:2020-06-11

136 次查看

开启你的 职业

完成该课程获得认证

开始
广告