给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。
请你找出平均数最大且 长度为 k 的连续子数组,并输出该最大平均数。
任何误差小于 10-5 的答案都将被视为正确答案。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| **示例 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 <= 105` - `-104 <= nums[i] <= 104`
|
- 入:下标为$i$的元素进入窗口,如果$i<k-1$则重复第一步。窗口元素和每次加$nums[i]$ ;
- 更新窗口内元素和的最大值;
- 下标$i-k+1$的元素离开窗口,元素和$sum$减去$nums[i-k+1]$
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| class Solution {
public:
double findMaxAverage(vector<int>& nums, int k) { int i=0,max_s=INT_MIN,sum=0; for(i;i<nums.size();i++) { sum+=nums[i]; if(i<k-1) continue; max_s = max(sum,max_s); sum -= nums[i-k+1]; } return (double) max_s / k; } };
|