什么是手机网站,青岛网页设计招聘,做网站比较专业的公司,长沙制作网站公司吗一、题目 链接#xff1a;643. 子数组最大平均数 I - 力扣#xff08;LeetCode#xff09; 函数原型#xff1a; double findMaxAverage(int* nums, int numsSize, int k) 二、思路 滑动窗口#xff1a; 先计算数组前k个元素总和#xff0c;作为第一个窗口#xff0c;默… 一、题目 链接643. 子数组最大平均数 I - 力扣LeetCode 函数原型 double findMaxAverage(int* nums, int numsSize, int k) 二、思路 滑动窗口 先计算数组前k个元素总和作为第一个窗口默认第一个窗口元素总和为最大总和。随后从第k1个元素开始遍历数组相当于窗口向右滑动计算当前窗口元素总和上一个窗口元素总和减去上一个窗口第一个元素加上当前窗口最后一个元素即正在遍历的元素。比较当前窗口与最大窗口总和选取最大的窗口总和。最后返回最大窗口总和/k即最大平均值。 小技巧double类型值计算比较慢所以计算过程中间值用int型最后将结果强制类型转换为double类型即可。 三、代码 double findMaxAverage(int* nums, int numsSize, int k) {int sum0;//当前窗口元素总和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;
}