# LeetCode算法学习之- 滑动窗口-[643. 子数组最大平均数 I]

123 阅读1分钟

题目

给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。

请你找出平均数最大且 长度为 k 的连续子数组,并输出该最大平均数。

任何误差小于 10-5 的答案都将被视为正确答案。

分析

  1. 连续子数组 =》 固定滑动窗口
  1. 最大平均数 =》 相加和除以k

解法:滑动窗口

​
思路
1. 因为是子数组 所以需要使用滑动窗口
2. 因为是固定尺寸K 所以需要使用滑动窗口的“右加左减”
2. 因为是求平均数 所以只需要求sum最大值
*/
​
// @lc code=start
/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
var findMaxAverage = function (nums, k) {
  let sum = 0;
  let max = 0;
//   初始化sum
  for (let i = 0; i < k; i++) {
    sum += nums[i];
  }
  max = sum;
//   不断 “右加左减” 去最大值
  for (let i = k; i < nums.length; i++) {
    sum += nums[i];
    sum -= nums[i - k];
    max = Math.max(max, sum);
  }
​
//   最后除以k来求最大平均数
  return max/k;
};
//时间复杂度:O(n)
//空间复杂度:O(1)
​

总结

今天这道题是主要是练习如何使用固定尺寸的滑动窗口 来求连续子数组类的题目

大家可以看看我分享的一个专栏(前端搞算法)里面有更多关于算法的题目的分享,希望能够帮到大家,我会尽量保持每天晚上更新,如果喜欢的麻烦帮我点个赞,十分感谢

大家如果对“TS”感兴趣的可以看看我的专栏 (TypeScript常用知识),感谢大家的支持

文章内容目的在于学习讨论与分享学习算法过程中的心得体会,文中部分素材来源网络,如有侵权,请联系删除,邮箱 182450609@qq.com

**