|
33 | 33 |
|
34 | 34 | ### 3.1 固定长度滑动窗口算法步骤
|
35 | 35 |
|
36 |
| -假设窗口的固定大小为 $window\underline{}size$。 |
| 36 | +假设窗口的固定大小为 $window\underline{\hspace{0.5em}}size$。 |
37 | 37 |
|
38 | 38 | 1. 使用两个指针 $left$、$right$。初始时,$left$、$right$ 都指向序列的第一个元素,即:$left = 0$,$right = 0$,区间 $[left, right]$ 被称为一个「窗口」。
|
39 |
| -2. 当窗口未达到 $window\underline{}size$ 大小时,不断移动 $right$,先将数组前 $window\underline{}size$ 个元素填入窗口中,即 `window.append(nums[right])`。 |
40 |
| -2. 当窗口达到 $window\underline{}size$ 大小时,即满足 `right - left + 1 >= window_size` 时,判断窗口内的连续元素是否满足题目限定的条件。 |
| 39 | +2. 当窗口未达到 $window\underline{\hspace{0.5em}}size$ 大小时,不断移动 $right$,先将数组前 $window\underline{\hspace{0.5em}}size$ 个元素填入窗口中,即 `window.append(nums[right])`。 |
| 40 | +2. 当窗口达到 $window\underline{\hspace{0.5em}}size$ 大小时,即满足 `right - left + 1 >= window_size` 时,判断窗口内的连续元素是否满足题目限定的条件。 |
41 | 41 | 1. 如果满足,再根据要求更新最优解。
|
42 |
| - 2. 然后向右移动 $left$,从而缩小窗口长度,即 `left += 1`,使得窗口大小始终保持为 $window\underline{}size$。 |
| 42 | + 2. 然后向右移动 $left$,从而缩小窗口长度,即 `left += 1`,使得窗口大小始终保持为 $window\underline{\hspace{0.5em}}size$。 |
43 | 43 | 3. 向右移动 $right$,将元素填入窗口中,即 `window.append(nums[right])`。
|
44 | 44 | 4. 重复 $2 \sim 4$ 步,直到 $right$ 到达数组末尾。
|
45 | 45 |
|
@@ -107,7 +107,7 @@ while right < len(nums):
|
107 | 107 |
|
108 | 108 | 这道题目是典型的固定窗口大小的滑动窗口题目。窗口大小为 $k$。具体做法如下:
|
109 | 109 |
|
110 |
| -1. $ans$ 用来维护答案数目。$window\underline{}sum$ 用来维护窗口中元素的和。 |
| 110 | +1. $ans$ 用来维护答案数目。$window\underline{\hspace{0.5em}}sum$ 用来维护窗口中元素的和。 |
111 | 111 | 2. $left$ 、$right$ 都指向序列的第一个元素,即:$left = 0$,$right = 0$。
|
112 | 112 | 3. 向右移动 $right$,先将 $k$ 个元素填入窗口中,即 `window_sum += arr[right]`。
|
113 | 113 | 4. 当窗口元素个数为 $k$ 时,即满足 `right - left + 1 >= k` 时,判断窗口内的元素和平均值是否大于等于阈值 $threshold$。
|
@@ -301,8 +301,8 @@ class Solution:
|
301 | 301 | 用滑动窗口来记录连续子数组的和,设定两个指针:$left$、$right$,分别指向滑动窗口的左右边界,保证窗口中的和刚好大于等于 $target$。
|
302 | 302 |
|
303 | 303 | 1. 一开始,$left$、$right$ 都指向 $0$。
|
304 |
| -2. 向右移动 $right$,将最右侧元素加入当前窗口和 $window\underline{}sum$ 中。 |
305 |
| -3. 如果 $window\underline{}sum \ge target$,则不断右移 $left$,缩小滑动窗口长度,并更新窗口和的最小值,直到 $window\underline{}sum < target$。 |
| 304 | +2. 向右移动 $right$,将最右侧元素加入当前窗口和 $window\underline{\hspace{0.5em}}sum$ 中。 |
| 305 | +3. 如果 $window\underline{\hspace{0.5em}}sum \ge target$,则不断右移 $left$,缩小滑动窗口长度,并更新窗口和的最小值,直到 $window\underline{\hspace{0.5em}}sum < target$。 |
306 | 306 | 4. 然后继续右移 $right$,直到 $right \ge len(nums)$ 结束。
|
307 | 307 | 5. 输出窗口和的最小值作为答案。
|
308 | 308 |
|
@@ -374,10 +374,10 @@ class Solution:
|
374 | 374 |
|
375 | 375 | ##### 思路 1:滑动窗口(不定长度)
|
376 | 376 |
|
377 |
| -1. 设定两个指针:$left$、$right$,分别指向滑动窗口的左右边界,保证窗口内所有数的乘积 $window\underline{}product$ 都小于 $k$。使用 $window\underline{}product$ 记录窗口中的乘积值,使用 $count$ 记录符合要求的子数组个数。 |
| 377 | +1. 设定两个指针:$left$、$right$,分别指向滑动窗口的左右边界,保证窗口内所有数的乘积 $window\underline{\hspace{0.5em}}product$ 都小于 $k$。使用 $window\underline{\hspace{0.5em}}product$ 记录窗口中的乘积值,使用 $count$ 记录符合要求的子数组个数。 |
378 | 378 | 2. 一开始,$left$、$right$ 都指向 $0$。
|
379 |
| -3. 向右移动 $right$,将最右侧元素加入当前子数组乘积 $window\underline{}product$ 中。 |
380 |
| -4. 如果 $window\underline{}product \ge k$,则不断右移 $left$,缩小滑动窗口长度,并更新当前乘积值 $window\underline{}product$ 直到 $window\underline{}product < k$。 |
| 379 | +3. 向右移动 $right$,将最右侧元素加入当前子数组乘积 $window\underline{\hspace{0.5em}}product$ 中。 |
| 380 | +4. 如果 $window\underline{\hspace{0.5em}}product \ge k$,则不断右移 $left$,缩小滑动窗口长度,并更新当前乘积值 $window\underline{\hspace{0.5em}}product$ 直到 $window\underline{\hspace{0.5em}}product < k$。 |
381 | 381 | 5. 记录累积答案个数加 $1$,继续右移 $right$,直到 $right \ge len(nums)$ 结束。
|
382 | 382 | 6. 输出累积答案个数。
|
383 | 383 |
|
|
0 commit comments