leetcode:643. 子数组最大平均数 I(滑动窗口)

一、题目

链接: 643. 子数组最大平均数 I - 力扣(LeetCode)

函数原型:

double findMaxAverage(int* nums, int numsSize, int k)
二、思路

滑动窗口:

先计算数组前k个元素总和,作为第一个窗口,默认第一个窗口元素总和为最大总和。随后从第k+1个元素开始遍历数组,相当于窗口向右滑动,计算当前窗口元素总和:上一个窗口元素总和,减去上一个窗口第一个元素,加上当前窗口最后一个元素(即正在遍历的元素)。比较当前窗口与最大窗口总和,选取最大的窗口总和。最后返回最大窗口总和/k,即最大平均值。

**小技巧:**double类型值计算比较慢,所以计算过程中间值用int型,最后将结果强制类型转换为double类型即可。
三、代码

cpp 复制代码
double 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;
}
相关推荐
CoovallyAIHub16 分钟前
无人机图像中的小目标检测新利器:深入解析 LAM-YOLO 模型
深度学习·算法·计算机视觉
刃神太酷啦30 分钟前
C++ 多态详解:从概念到实现原理----《Hello C++ Wrold!》(14)--(C/C++)
java·c语言·c++·qt·算法·leetcode·面试
DoraBigHead44 分钟前
小哆啦解题记 · 数字连续段谜案
算法
✿ ༺ ོIT技术༻2 小时前
剑指offer第2版:链表系列
数据结构·算法·链表
yiridancan2 小时前
终极剖析HashMap:数据结构、哈希冲突与解决方案全解
java·数据结构·算法·哈希算法
满分观察网友z2 小时前
性能优化大作战:从 O(N*M) 到 O(N),我的哈希表奇遇记(1865. 找出和为指定值的下标对)
算法
点云SLAM4 小时前
二叉树算法详解和C++代码示例
数据结构·c++·算法·红黑树·二叉树算法
今天背单词了吗98011 小时前
算法学习笔记:19.牛顿迭代法——从原理到实战,涵盖 LeetCode 与考研 408 例题
笔记·学习·算法·牛顿迭代法
jdlxx_dongfangxing12 小时前
进制转换算法详解及应用
算法
why技术13 小时前
也是出息了,业务代码里面也用上算法了。
java·后端·算法