Cool说丨力扣643

简介: 643. 子数组最大平均数 I

643. 子数组最大平均数 I

给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。

示例 1:

输入: [1,12,-5,-6,50,3], k = 4

输出: 12.75

解释: 最大平均数 (12-5-6+50)/4 = 51/4 = 12.75


注意:

  1. 1 <= k <= n <= 30,000。
  2. 所给数据范围 [-10,000,10,000]。

第一版,常规遍历,超时

doubleaver(vector<int>&res,intk) {

   doublesum=0;

   for (auto&a : res) {

       sum+=a;

   }

   returnsum/k;

}

doublefindMaxAverage(vector<int>&nums, intk) {

   vector<int>res;

   inti=0;

   for (inti=0; i<k; ++i) {

       res.push_back(nums[i]);

   }

   double  average=aver(res,k);

   doubletemp=0.0;

   for ( ; i<nums.size(); ++i) {

       res[i%k] =nums[i];

       temp=aver(res, k);

       average=temp>average?temp : average;

   }

   returnaverage;

}

第二版,改进了一下

执行用时 :156 ms, 在所有 cpp 提交中击败了76.31%的用户

内存消耗 :21.1 MB, 在所有 cpp 提交中击败了5.17%的用户

doublefindMaxAverage(vector<int>&nums, intk) {

   vector<int>res;

   inti=0;

   for (inti=0; i<k; ++i) {

       res.push_back(nums[i]);

   }

   intsum=0;

   for (auto&a : res) {

       sum+=a;

   }

   intresult=sum;

   for ( ; i<nums.size(); ++i) {

       sum-=res[i%k];

       res[i%k] =nums[i];

       sum+=nums[i];

       result=max(sum,result);

   }

   returnresult*1.0/k;

}

第三版,改进一点点

执行用时 :164 ms, 在所有 cpp 提交中击败了70.34%的用户

内存消耗 :18.7 MB, 在所有 cpp 提交中击败了7.76%的用户

doublefindMaxAverage(vector<int>&nums, intk) {

   vector<int>res;

   res.reserve(k);

   inti=0;

   for (; i<k; ++i) {

       res.push_back(nums[i]);    

   }

   intsum=accumulate(res.begin(), res.end(), 0);

   intresult=sum;

   for ( ; i<nums.size(); ++i) {

       sum-=res[i%k];

       res[i%k] =nums[i];

       sum+=nums[i];

       result=max(sum,result);

   }

   returnresult*1.0/k;

}


目录
相关文章
|
人工智能 C# C++
Cool说丨力扣153、454
153. 寻找旋转排序数组中的最小值 454. 四数相加 II
196 1
|
C# C++
Cool说丨力扣287/792/378
关注博主,获取更多知识
173 0
|
C# C++ 索引
Cool说丨力扣162
162. 寻找峰值
209 0
|
存储 C# C++
Cool说丨力扣29/34
关注博主。获取更多知识
171 0
|
存储 C# C++
Cool说丨力扣392
392. 判断子序列
147 0
|
C# C++
Cool说丨力扣744、704
744. 寻找比目标字母大的最小字母 704. 二分查找
221 0
|
C#
Cool说丨力扣475
475. 供暖器
174 0
|
机器学习/深度学习 算法 C#
Cool说丨力扣202
202. 快乐数
158 0
|
C#
Cool说丨力扣167
167. 两数之和 II - 输入有序数组
156 0
|
C# C++
Cool说丨力扣374、441
441. 排列硬币 374. 猜数字大小
163 0