每日一题:每天一个新挑战;
循序渐进:从易到难,扎实掌握;
系统分类:按数据结构分类,有助于构建知识框架;
丰富题量:100 道精选题,覆盖简单/中等/困难难度。
给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。 请你找出平均数最大且 长度为 k 的连续子数组,并输出该最大平均数。 任何误差小于10^-5` 的答案都将被视为正确答案。
示例 1:
输入:nums = [1,12,-5,-6,50,3], k = 4
输出:12.75
解释:最大平均数 (12-5-6+50)/4 = 51/4 = 12.75
示例 2:
输入:nums = [5], k = 1
输出:5.00000
提示:
- n == nums.length
- 1 <= k <= n <= 10^5
- -10^4 <= nums[i] <= 10^4
代码卡片

题目解析
题目要求找出长度为 k 的连续子数组的最大平均数,并返回该最大平均数。
方法一:滑动窗口
我们可以使用滑动窗口的方法。首先计算数组前 k 个元素的和,作为初始窗口的和。然后,依次滑动窗口,计算新窗口的和,并更新最大和。由于窗口的大小是固定的 k,所以计算平均数时只需将当前的和除以 k。
- 时间复杂度:O(n),其中 n 是数组 nums 的长度。我们只需遍历一次数组。
- 空间复杂度:O(1),只使用了常数级别的额外空间。
var findMaxAverage = function (nums, k) {
let maxSum = 0;
for (let i = 0; i < k; i++) {
maxSum += nums[i];
}
let currentSum = maxSum;
for (let i = k; i < nums.length; i++) {
currentSum += nums[i] - nums[i - k];
maxSum = Math.max(maxSum, currentSum);
}
return maxSum / k;
}
总结
这种滑动窗口的方法可以在 O(n) 的时间内解决问题,适用于数组长度较大的情况。
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/288987
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!