一、题目
链接: 643. 子数组最大平均数 I - 力扣(LeetCode)
函数原型:
double findMaxAverage(int* nums, int numsSize, int k)
二、思路滑动窗口:
先计算数组前k个元素总和,作为第一个窗口,默认第一个窗口元素总和为最大总和。随后从第k+1个元素开始遍历数组,相当于窗口向右滑动,计算当前窗口元素总和:上一个窗口元素总和,减去上一个窗口第一个元素,加上当前窗口最后一个元素(即正在遍历的元素)。比较当前窗口与最大窗口总和,选取最大的窗口总和。最后返回最大窗口总和/k,即最大平均值。
**小技巧:**double类型值计算比较慢,所以计算过程中间值用int型,最后将结果强制类型转换为double类型即可。
三、代码
cppdouble findMaxAverage(int* nums, int numsSize, int k) { int sum=0;//当前窗口元素总和 int maxsum = 0;//选取最大的和 //计算前k个数据总和 for (int i = 0; i < k; i++) { sum += nums[i]; } maxsum = sum;//初始时默认以第一个窗口元素总和为最大 //滑动窗口 for (int i = k; i < numsSize; i++) { sum = sum + nums[i] - nums[i - k];//减去原窗口第一个元素,加上新窗口最后一个元素 maxsum = fmax(maxsum, sum); } return (double)maxsum / k; }
leetcode:643. 子数组最大平均数 I(滑动窗口)
南林yan2023-12-09 17:47
相关推荐
算法歌者18 分钟前
[算法]入门1.矩阵转置林开落L33 分钟前
前缀和算法习题篇(上)远望清一色34 分钟前
基于MATLAB边缘检测博文tyler_download35 分钟前
手撸 chatgpt 大模型:简述 LLM 的架构,算法和训练流程SoraLuna1 小时前
「Mac玩转仓颉内测版7」入门篇7 - Cangjie控制结构(下)我狠狠地刷刷刷刷刷1 小时前
中文分词模拟器鸽鸽程序猿1 小时前
【算法】【优选算法】前缀和(上)九圣残炎1 小时前
【从零开始的LeetCode-算法】2559. 统计范围内的元音字符串数YSRM1 小时前
Experimental Analysis of Dedicated GPU in Virtual Framework using vGPU 论文分析韭菜盖饭2 小时前
LeetCode每日一题3261---统计满足 K 约束的子字符串数量 II