Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit c398820

Browse files
committed
Update 剑指 Offer II 041. 滑动窗口的平均值.md
1 parent 854d30f commit c398820

File tree

1 file changed

+36
-10
lines changed

1 file changed

+36
-10
lines changed

Solutions/剑指 Offer II 041. 滑动窗口的平均值.md

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,46 @@
55

66
## 题目大意
77

8-
给定一个整数 `val` 和一个窗口大小 `size`
8+
**描述**:给定一个整数数据流和一个窗口大小 `size`
99

10-
要求:根据滑动窗口的大小,计算滑动窗口里所有数字的平均值。要实现 `MovingAverage` 类:
10+
**要求**:根据滑动窗口的大小,计算滑动窗口里所有数字的平均值。要求实现 `MovingAverage` 类:
1111

12-
- `MovingAverage(int size)` 用窗口大小 `size` 初始化对象。
13-
- `double next(int val)` 成员函数 `next` 每次调用的时候都会往滑动窗口增加一个整数,请计算并返回数据流中最后 `size` 个值的移动平均值,即滑动窗口里所有数字的平均值。
12+
- `MovingAverage(int size)`用窗口大小 `size` 初始化对象。
13+
- `double next(int val)`成员函数 `next` 每次调用的时候都会往滑动窗口增加一个整数,请计算并返回数据流中最后 `size` 个值的移动平均值,即滑动窗口里所有数字的平均值。
1414

15-
## 解题思路
15+
**说明**
1616

17-
使用队列保存滑动窗口的元素,并记录对应窗口大小和元素和。
17+
- $1 \le size \le 1000$。
18+
- $-10^5 \le val \le 10^5$。
19+
- 最多调用 `next` 方法 $10^4$ 次。
1820

19-
在小于窗口大小的时候,直接向队列中添加元素,并记录元素和。
21+
**示例**
2022

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+
```
2237

23-
然后根据元素和和队列中元素个数计算出平均值。
38+
## 解题思路
2439

25-
## 代码
40+
### 思路 1:队列
41+
42+
1. 使用队列保存滑动窗口的元素,并记录对应窗口大小和元素和。
43+
2. 当队列长度小于窗口大小的时候,直接向队列中添加元素,并记录当前窗口中的元素和。
44+
3. 当队列长度等于窗口大小的时候,先将队列头部元素弹出,再添加元素,并记录当前窗口中的元素和。
45+
4. 然后根据元素和和队列中元素个数计算出平均值。
46+
47+
### 思路 1:代码
2648

2749
```Python
2850
class MovingAverage:
@@ -48,3 +70,7 @@ class MovingAverage:
4870
return self.sum / len(self.queue)
4971
```
5072

73+
### 思路 1:复杂度分析
74+
75+
- **时间复杂度**:$O(1)$。初始化方法和每次调用 `next` 方法的时间复杂度都是 $O(1)$。
76+
- **空间复杂度**:$O(size)$。其中 $size$ 就是给定的滑动窗口的大小。

0 commit comments

Comments
 (0)