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