题目
给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。
请你找出平均数最大且 长度为 k 的连续子数组,并输出该最大平均数。
任何误差小于 10-5 的答案都将被视为正确答案。
分析
- 连续子数组 =》 固定滑动窗口
- 最大平均数 =》 相加和除以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
**