@@ -6,9 +6,9 @@ Tag : 「双指针」、「滑动窗口」、「二分」、「前缀和」
6
6
7
7
8
8
9
- 给定一个由若干 0 和 1 组成的数组 A ,我们最多可以将 K 个值从 0 变成 1 。
9
+ 给定一个由若干 $0$ 和 $1$ 组成的数组 ` A ` ,我们最多可以将 $K$ 个值从 $0$ 变成 $1$ 。
10
10
11
- 返回仅包含 1 的最长(连续)子数组的长度。
11
+ 返回仅包含 $1$ 的最长(连续)子数组的长度。
12
12
13
13
14
14
示例 1:
@@ -29,9 +29,9 @@ Tag : 「双指针」、「滑动窗口」、「二分」、「前缀和」
29
29
```
30
30
31
31
提示:
32
- * 1 <= A.length <= 20000
33
- * 0 <= K <= A.length
34
- * A[ i] 为 0 或 1
32
+ * $ 1 <= A.length <= 20000$
33
+ * $ 0 <= K <= A.length$
34
+ * $ A[ i] $ 为 $0$ 或 $1$
35
35
36
36
---
37
37
@@ -51,7 +51,7 @@ Tag : 「双指针」、「滑动窗口」、「二分」、「前缀和」
51
51
* 如果 $A[ i] $ 本身不为 1 的话,由于定义是必须以 $A[ i] $ 为结尾,因此必须要选择翻转该位置,$f[ i] [ j ] = f[ i - 1] [ j - 1 ] + 1$。
52
52
53
53
代码:
54
- ``` Java []
54
+ ``` Java
55
55
class Solution {
56
56
public int longestOnes (int [] nums , int k ) {
57
57
int n = nums. length;
@@ -75,7 +75,7 @@ class Solution {
75
75
* 时间复杂度:$O(nk)$
76
76
* 空间复杂度:$O(k)$
77
77
78
- ***
78
+ ---
79
79
80
80
### 前缀和 + 二分
81
81
@@ -134,19 +134,18 @@ class Solution {
134
134
135
135
** 当目标值不存在,「二分」找到的应该是数组内比目标值小或比目标值大的最接近的数。因此二分结束后先进行 ` check ` 再使用是一个好习惯。**
136
136
137
- ***
137
+ ---
138
138
139
139
### 双指针
140
140
141
141
由于我们总是比较 ` len ` 、` tot ` 和 ` k ` 三者的关系。
142
142
143
143
因此我们可以使用「滑动窗口」的思路,动态维护一个左右区间 ` [j, i] ` 和维护窗口内和 ` tot ` 。
144
144
145
- 右端点一直右移,左端点在窗口不满足「` len - tol <= k ` 」的时候进行右移。
146
-
147
- 即可做到线程扫描的复杂度:
145
+ 右端点一直右移,左端点在窗口不满足「` len - tol <= k ` 」的时候进行右移,即可做到线程扫描的复杂度。
148
146
149
- ``` Java []
147
+ 代码:
148
+ ``` Java
150
149
class Solution {
151
150
public int longestOnes (int [] nums , int k ) {
152
151
int n = nums. length;
@@ -163,20 +162,19 @@ class Solution {
163
162
* 时间复杂度:$O(n)$
164
163
* 空间复杂度:$O(1)$
165
164
166
- ***
165
+ ---
167
166
168
167
### 总结
169
168
170
169
** 除了掌握本题解法以外,我还希望你能理解这几种解法是如何被想到的(特别是如何从「动态规划」想到「二分」)。**
171
170
172
171
** 根据数据范围(复杂度)调整自己所使用的算法的分析能力,比解决该题本身更加重要。**
173
172
174
-
175
173
---
176
174
177
175
### 最后
178
176
179
- 这是我们「刷穿 LeetCode」系列文章的第 ` No.1004 ` 篇,系列开始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先将所有不带锁的题目刷完 。
177
+ 这是我们「刷穿 LeetCode」系列文章的第 ` No.1004 ` 篇,系列开始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先把所有不带锁的题目刷完 。
180
178
181
179
在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。
182
180
0 commit comments