5
5
6
6
## 题目大意
7
7
8
- 给定一个整数 ` val ` 和一个窗口大小 ` size ` 。
8
+ ** 描述 ** :给定一个整数数据流和一个窗口大小 ` size ` 。
9
9
10
- 要求 :根据滑动窗口的大小,计算滑动窗口里所有数字的平均值。要实现 ` MovingAverage ` 类:
10
+ ** 要求 ** :根据滑动窗口的大小,计算滑动窗口里所有数字的平均值。要求实现 ` MovingAverage ` 类:
11
11
12
- - ` MovingAverage(int size) ` 用窗口大小 ` size ` 初始化对象。
13
- - ` double next(int val) ` 成员函数 ` next ` 每次调用的时候都会往滑动窗口增加一个整数,请计算并返回数据流中最后 ` size ` 个值的移动平均值,即滑动窗口里所有数字的平均值。
12
+ - ` MovingAverage(int size) ` : 用窗口大小 ` size ` 初始化对象。
13
+ - ` double next(int val) ` : 成员函数 ` next ` 每次调用的时候都会往滑动窗口增加一个整数,请计算并返回数据流中最后 ` size ` 个值的移动平均值,即滑动窗口里所有数字的平均值。
14
14
15
- ## 解题思路
15
+ ** 说明 ** :
16
16
17
- 使用队列保存滑动窗口的元素,并记录对应窗口大小和元素和。
17
+ - $1 \le size \le 1000$。
18
+ - $-10^5 \le val \le 10^5$。
19
+ - 最多调用 ` next ` 方法 $10^4$ 次。
18
20
19
- 在小于窗口大小的时候,直接向队列中添加元素,并记录元素和。
21
+ ** 示例 ** :
20
22
21
- 在等于窗口大小的时候,先将队列头部元素弹出,再添加元素,并记录元素和。
23
+ ``` Python
24
+ 输入:
25
+ inputs = [" MovingAverage" , " next" , " next" , " next" , " next" ]
26
+ inputs = [[3 ], [1 ], [10 ], [3 ], [5 ]]
27
+ 输出:
28
+ [null, 1.0 , 5.5 , 4.66667 , 6.0 ]
29
+
30
+ 解释:
31
+ MovingAverage movingAverage = new MovingAverage(3 );
32
+ movingAverage.next(1 ); // 返回 1.0 = 1 / 1
33
+ movingAverage.next(10 ); // 返回 5.5 = (1 + 10 ) / 2
34
+ movingAverage.next(3 ); // 返回 4.66667 = (1 + 10 + 3 ) / 3
35
+ movingAverage.next(5 ); // 返回 6.0 = (10 + 3 + 5 ) / 3
36
+ ```
22
37
23
- 然后根据元素和和队列中元素个数计算出平均值。
38
+ ## 解题思路
24
39
25
- ## 代码
40
+ ### 思路 1:队列
41
+
42
+ 1 . 使用队列保存滑动窗口的元素,并记录对应窗口大小和元素和。
43
+ 2 . 当队列长度小于窗口大小的时候,直接向队列中添加元素,并记录当前窗口中的元素和。
44
+ 3 . 当队列长度等于窗口大小的时候,先将队列头部元素弹出,再添加元素,并记录当前窗口中的元素和。
45
+ 4 . 然后根据元素和和队列中元素个数计算出平均值。
46
+
47
+ ### 思路 1:代码
26
48
27
49
``` Python
28
50
class MovingAverage :
@@ -48,3 +70,7 @@ class MovingAverage:
48
70
return self .sum / len (self .queue)
49
71
```
50
72
73
+ ### 思路 1:复杂度分析
74
+
75
+ - ** 时间复杂度** :$O(1)$。初始化方法和每次调用 ` next ` 方法的时间复杂度都是 $O(1)$。
76
+ - ** 空间复杂度** :$O(size)$。其中 $size$ 就是给定的滑动窗口的大小。
0 commit comments