Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit ed514cd

Browse files
✨update: Modify 992
1 parent 6551b36 commit ed514cd

File tree

1 file changed

+18
-19
lines changed

1 file changed

+18
-19
lines changed

‎LeetCode/991-1000/992. K 个不同整数的子数组(困难).md‎

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ Tag : 「双指针」、「滑动窗口」
66

77

88

9-
给定一个正整数数组 A,如果 A 的某个子数组中不同整数的个数恰好为 K,则称 A 的这个连续、不一定不同的子数组为好子数组。
9+
给定一个正整数数组 $A$,如果 $A$ 的某个子数组中不同整数的个数恰好为 $K$,则称 $A$ 的这个连续、不一定不同的子数组为好子数组。
1010

11-
(例如,[1,2,3,1,2] 中有 3 个不同的整数:1,2,以及 3。)
11+
例如,$[1,2,3,1,2]$ 中有 3ドル$ 个不同的整数:1ドル,ドル2ドル$,以及 3ドル$。
1212

13-
返回 A 中好子数组的数目。
13+
返回 $A$ 中好子数组的数目。
1414

1515
示例 1:
1616
```
@@ -27,31 +27,30 @@ Tag : 「双指针」、「滑动窗口」
2727

2828

2929
提示:
30-
* 1 <= A.length <= 20000
31-
* 1 <= A[i] <= A.length
32-
* 1 <= K <= A.length
30+
* $1 <= A.length <= 20000$
31+
* $1 <= A[i] <= A.length$
32+
* $1 <= K <= A.length$
3333

3434
---
3535

3636
### 滑动窗口
3737

38-
对原数组 `nums` 的每一个位置 `i` 而言:
38+
对原数组每个 $nums[i]$ 而言:
3939

40-
1. 找到其左边「最远」满足出现 `k` 个不同字符的下标,记为 `p`。这时候形成的区间为 `[p, i]`
41-
2. 找到其左边「最远」满足出现 `k - 1` 个不同字符的下标,记为 `j`。这时候形成的区间为 `[j, i]`
42-
3. **那么对于 `j - p` 其实就是代表以 nums[i] 为右边界(必须包含 num[i]),不同字符数量「恰好」为 k 的子数组数量**
40+
1. 找到其左边「最远」满足出现 $k$ 个不同字符的下标,记为 $p$。这时候形成的区间为 $[p, i]$
41+
2. 找到其左边「最远」满足出现 $k - 1$ 个不同字符的下标,记为 $j$ 。这时候形成的区间为 $[j, i]$
42+
3. **那么对于 $j - p$ 其实就是代表以 $nums[i]$ 为右边界(必须包含 $num[i]$),不同字符数量「恰好」为 $k$ 的子数组数量**
4343

4444
![WechatIMG1758.png](https://pic.leetcode-cn.com/1612839352-exScZN-WechatIMG1758.png)
4545

46-
我们使用 `lower` 数组存起每个位置的 `k`;使用 `upper` 数组存起每个位置的 `j`
46+
我们使用 $lower$ 数组存起每个位置的 $k$;使用 $upper$ 数组存起每个位置的 $j$
4747

48-
累积每个位置的 `upper[i] - lower[i]` 就是答案。
48+
累积每个位置的 $upper[i] - lower[i]$ 就是答案。
4949

50-
计算 `lower` 数组 和 `upper` 数组的过程可以使用双指针。
50+
计算 $lower$ 数组 和 $upper$ 数组的过程可以使用双指针。
5151

5252
代码:
53-
54-
```java
53+
```Java
5554
class Solution {
5655
public int subarraysWithKDistinct(int[] nums, int k) {
5756
int n = nums.length;
@@ -82,19 +81,19 @@ class Solution {
8281
* 时间复杂度:对数组进行常数次扫描。复杂度为 $O(n)$。
8382
* 空间复杂度:$O(n)$
8483

85-
***
84+
---
8685

8786
### 其他
8887

89-
这里的 `lower``upper` 其实可以优化掉,但也只是常数级别的优化,空间复杂度仍为 $O(n)$。
88+
这里的 $lower$$upper$ 其实可以优化掉,但也只是常数级别的优化,空间复杂度仍为 $O(n)$。
9089

91-
推荐大家打印一下 `lower``upper` 来看看,加深对 **`upper[i] - lower[i]` 代表了考虑 `nums[i]` 为右边界,不同字符数量「恰好」为 k 的子数组数量 」** 这句话的理解。
90+
推荐大家打印一下 $lower$$upper$ 来看看,加深对 **$upper[i] - lower[i]$ 代表了考虑 $nums[i]$ 为右边界,不同字符数量「恰好」为 $k$ 的子数组数量 」** 这句话的理解。
9291

9392
---
9493

9594
### 最后
9695

97-
这是我们「刷穿 LeetCode」系列文章的第 `No.992` 篇,系列开始于 2021年01月01日,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先将所有不带锁的题目刷完
96+
这是我们「刷穿 LeetCode」系列文章的第 `No.992` 篇,系列开始于 2021年01月01日,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先把所有不带锁的题目刷完
9897

9998
在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。
10099

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /