LeetCode刷题(56)~子数组最大平均数 I【滑动窗口优化版】
【摘要】 题目描述
给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。
示例 1:
输入: [1,12,-5,-6,50,3], k = 4
输出: 12.75
解释: 最大平均数 (12-5-6+50)/4 = 51/4 = 12.75
123
注意:
1 <= k <= n <= 30,000。所给数据范围 [-10,...
题目描述
给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。
示例 1:
输入: [1,12,-5,-6,50,3], k = 4
输出: 12.75
解释: 最大平均数 (12-5-6+50)/4 = 51/4 = 12.75
- 1
- 2
- 3
注意:
- 1 <= k <= n <= 30,000。
- 所给数据范围 [-10,000,10,000]。
解答 By 海轰
提交代码(暴力解法-超时)
double findMaxAverage(vector<int>& nums, int k) { int len=nums.size(); double pmax; for(int i=0;i<len-k+1;++i) { double sum=0; for(int j=i;j<i+k;++j) { sum+=nums[j]; } if(i==0) pmax=sum/k; else pmax= pmax<(sum/k)? sum/k:pmax; } return pmax; }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
运行结果
提交代码(累计求和)
double findMaxAverage(vector<int>& nums, int k) { int len=nums.size(); double sums[len]; // for(int i=0;i<len;++i) // sums[i]=0; sums[0]=nums[0]; for(int i=1;i<len;++i) sums[i]=sums[i-1]+nums[i]; double pmax=sums[k-1]/k; for(int i=k;i<len;++i) { double temp=(sums[i]-sums[i-k])/k; pmax= pmax<temp? temp:pmax; } return pmax; }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
运行结果
提交代码(滑动窗口-优化版)
double findMaxAverage(vector<int>& nums, int k) { int len=nums.size(); double sum=0; for(int i=0;i<k;++i) sum+=nums[i]; double result=sum; for(int i=k;i<len;++i) { sum=sum+nums[i]-nums[i-k]; result=max(sum,result); } return result/k; }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
运行结果
题目来源
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-average-subarray-i
文章来源: haihong.blog.csdn.net,作者:海轰Pro,版权归原作者所有,如需转载,请联系作者。
原文链接:haihong.blog.csdn.net/article/details/108036767
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)