LeetCode之子数组最大平均数 I(六百四十三)

举报
liuzhen007 发表于 2021/05/26 18:28:19 2021/05/26
【摘要】 目录   题目 解题 方法一、滑动窗口 题目 (原题链接:https://leetcode-cn.com/problems/maximum-average-subarray-i/) 给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。 示例 1: 输入: [1,12,-5...

目录

 

题目

解题

方法一、滑动窗口


题目

(原题链接:https://leetcode-cn.com/problems/maximum-average-subarray-i/

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

示例 1:

输入: [1,12,-5,-6,50,3], k = 4
输出: 12.75
解释: 最大平均数 (12-5-6+50)/4 = 51/4 = 12.75

注意:

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

解题

方法一、滑动窗口

分析:该题可以使用滑动窗口来解,首先求得初始窗口之和,然后根据当前滑动窗口之和等于上一个窗口之和减去上一个窗口的第一个数,再加上当前窗口的最后一个数的关系等式进行比较,进而求得最大和,最后再取平均值。直接看代码吧。

代码:(C++)


  
  1. class Solution {
  2. public:
  3. double findMaxAverage(vector<int>& nums, int k) {
  4. double sum = 0;
  5. for (int i = 0; i < k; i++)
  6. sum += nums[i];
  7. double ma = sum;
  8. for (int i = k; i < nums.size(); i++) {
  9. sum = sum - nums[i - k] + nums[i];
  10. ma = max(ma, sum);
  11. }
  12. return ma / k;
  13. }
  14. };

时间复杂度:O(n)。

空间复杂度:O(1)。

执行结果:

 

如果有疑问,欢迎评论留言或者私信沟通! 

文章来源: liuzhen.blog.csdn.net,作者:Data-Mining,版权归原作者所有,如需转载,请联系作者。

原文链接:liuzhen.blog.csdn.net/article/details/107971205

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。