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 be9f146

Browse files
feat: update solutions to lc problems: No.0209,0266 (doocs#3372)
* No.0209.Minimum Size Subarray Sum * No.0266.Palindrome Permutation
1 parent 305fef5 commit be9f146

File tree

11 files changed

+136
-139
lines changed

11 files changed

+136
-139
lines changed

‎solution/0200-0299/0209.Minimum Size Subarray Sum/README.md

Lines changed: 42 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -266,13 +266,15 @@ public class Solution {
266266

267267
### 方法二:双指针
268268

269-
我们可以使用双指针 $j$ 和 $i$ 维护一个窗口,其中窗口中的所有元素之和小于 $target$。初始时 $j = 0,ドル答案 $ans = n + 1,ドル其中 $n$ 为数组 $nums$ 的长度
269+
我们注意到,数组 $\textit{nums}$ 中的元素均为正整数,我们可以考虑使用双指针来维护一个滑动窗口
270270

271-
接下来,指针 $i$ 从 0ドル$ 开始向右移动,每次移动一步,我们将指针 $i$ 对应的元素加入窗口,同时更新窗口中元素之和。如果窗口中元素之和大于等于 $target,ドル说明当前子数组满足条件,我们可以更新答案,即 $ans = \min(ans, i - j + 1)$。然后我们不断地从窗口中移除元素 $nums[j],ドル直到窗口中元素之和小于 $target,ドル然后重复上述过程
271+
具体地,我们定义两个指针 $\textit{l}$ 和 $\textit{r}$ 分别表示滑动窗口的左边界和右边界,用一个变量 $\textit{s}$ 代表滑动窗口中的元素和
272272

273-
最后,如果 $ans \leq n,ドル则说明存在满足条件的子数组,返回 $ans,ドル否则返回 0ドル$。
273+
在每一步操作中,我们移动右指针 $\textit{r},ドル使得滑动窗口中加入一个元素,如果此时 $\textit{s} \ge \textit{target},ドル我们就更新最小长度 $\textit{ans} = \min(\textit{ans}, \textit{r} - \textit{l} + 1,ドル并将左指针 $\textit{l}$ 循环向右移动,直至有 $\textit{s} < \textit{target}$。
274+
275+
最后,如果最小长度 $\textit{ans}$ 仍为初始值,我们就返回 0ドル,ドル否则返回 $\textit{ans}$。
274276

275-
时间复杂度 $O(n),ドル空间复杂度 $O(1)$。其中 $n$ 为数组 $nums$ 的长度。
277+
时间复杂度 $O(n),ドル其中 $n$ 为数组 $\textit{nums}$ 的长度。空间复杂度 $O(1)$
276278

277279
<!-- tabs:start -->
278280

@@ -281,34 +283,33 @@ public class Solution {
281283
```python
282284
class Solution:
283285
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
284-
n = len(nums)
285-
ans = n + 1
286-
s = j = 0
287-
for i, x in enumerate(nums):
286+
l = s = 0
287+
ans = inf
288+
for r, x in enumerate(nums):
288289
s += x
289-
while j < n ands >= target:
290-
ans = min(ans, i - j + 1)
291-
s -= nums[j]
292-
j += 1
293-
return ans if ans <= n else 0
290+
while s >= target:
291+
ans = min(ans, r - l + 1)
292+
s -= nums[l]
293+
l += 1
294+
return 0 if ans == inf else ans
294295
```
295296

296297
#### Java
297298

298299
```java
299300
class Solution {
300301
public int minSubArrayLen(int target, int[] nums) {
301-
int n = nums.length;
302+
int l =0, n = nums.length;
302303
long s = 0;
303304
int ans = n + 1;
304-
for (int i = 0, j =0; i < n; ++i) {
305-
s += nums[i];
306-
while (j < n &&s >= target) {
307-
ans = Math.min(ans, i - j + 1);
308-
s -= nums[j++];
305+
for (int r = 0; r < n; ++r) {
306+
s += nums[r];
307+
while (s >= target) {
308+
ans = Math.min(ans, r - l + 1);
309+
s -= nums[l++];
309310
}
310311
}
311-
return ans <= n ? ans : 0;
312+
return ans > n ? 0 : ans;
312313
}
313314
}
314315
```
@@ -319,17 +320,17 @@ class Solution {
319320
class Solution {
320321
public:
321322
int minSubArrayLen(int target, vector<int>& nums) {
322-
int n = nums.size();
323+
int l = 0, n = nums.size();
323324
long long s = 0;
324325
int ans = n + 1;
325-
for (int i = 0, j = 0; i < n; ++i) {
326-
s += nums[i];
327-
while (j < n && s >= target) {
328-
ans = min(ans, i - j + 1);
329-
s -= nums[j++];
326+
for (int r = 0; r < n; ++r) {
327+
s += nums[r];
328+
while (s >= target) {
329+
ans = min(ans, r - l + 1);
330+
s -= nums[l++];
330331
}
331332
}
332-
return ans == n + 1 ? 0 : ans;
333+
return ans > n ? 0 : ans;
333334
}
334335
};
335336
```
@@ -338,18 +339,17 @@ public:
338339
339340
```go
340341
func minSubArrayLen(target int, nums []int) int {
341-
n := len(nums)
342-
s := 0
343-
ans := n + 1
344-
for i, j := 0, 0; i < n; i++ {
345-
s += nums[i]
342+
l, n := 0, len(nums)
343+
s, ans := 0, n+1
344+
for r, x := range nums {
345+
s += x
346346
for s >= target {
347-
ans = min(ans, i-j+1)
348-
s -= nums[j]
349-
j++
347+
ans = min(ans, r-l+1)
348+
s -= nums[l]
349+
l++
350350
}
351351
}
352-
if ans == n+1 {
352+
if ans > n {
353353
return 0
354354
}
355355
return ans
@@ -361,16 +361,15 @@ func minSubArrayLen(target int, nums []int) int {
361361
```ts
362362
function minSubArrayLen(target: number, nums: number[]): number {
363363
const n = nums.length;
364-
let s = 0;
365-
let ans = n + 1;
366-
for (let i = 0, j = 0; i < n; ++i) {
367-
s += nums[i];
364+
let [s, ans] = [0, n + 1];
365+
for (let l = 0, r = 0; r < n; ++r) {
366+
s += nums[r];
368367
while (s >= target) {
369-
ans = Math.min(ans, i - j + 1);
370-
s -= nums[j++];
368+
ans = Math.min(ans, r - l + 1);
369+
s -= nums[l++];
371370
}
372371
}
373-
return ans ===n+1 ? 0 : ans;
372+
return ans >n ? 0 : ans;
374373
}
375374
```
376375

‎solution/0200-0299/0209.Minimum Size Subarray Sum/README_EN.md

Lines changed: 36 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -272,34 +272,33 @@ The time complexity is $O(n),ドル and the space complexity is $O(1)$. Here, $n$ is
272272
```python
273273
class Solution:
274274
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
275-
n = len(nums)
276-
ans = n + 1
277-
s = j = 0
278-
for i, x in enumerate(nums):
275+
l = s = 0
276+
ans = inf
277+
for r, x in enumerate(nums):
279278
s += x
280-
while j < n ands >= target:
281-
ans = min(ans, i - j + 1)
282-
s -= nums[j]
283-
j += 1
284-
return ans if ans <= n else 0
279+
while s >= target:
280+
ans = min(ans, r - l + 1)
281+
s -= nums[l]
282+
l += 1
283+
return 0 if ans == inf else ans
285284
```
286285

287286
#### Java
288287

289288
```java
290289
class Solution {
291290
public int minSubArrayLen(int target, int[] nums) {
292-
int n = nums.length;
291+
int l =0, n = nums.length;
293292
long s = 0;
294293
int ans = n + 1;
295-
for (int i = 0, j =0; i < n; ++i) {
296-
s += nums[i];
297-
while (j < n &&s >= target) {
298-
ans = Math.min(ans, i - j + 1);
299-
s -= nums[j++];
294+
for (int r = 0; r < n; ++r) {
295+
s += nums[r];
296+
while (s >= target) {
297+
ans = Math.min(ans, r - l + 1);
298+
s -= nums[l++];
300299
}
301300
}
302-
return ans <= n ? ans : 0;
301+
return ans > n ? 0 : ans;
303302
}
304303
}
305304
```
@@ -310,17 +309,17 @@ class Solution {
310309
class Solution {
311310
public:
312311
int minSubArrayLen(int target, vector<int>& nums) {
313-
int n = nums.size();
312+
int l = 0, n = nums.size();
314313
long long s = 0;
315314
int ans = n + 1;
316-
for (int i = 0, j = 0; i < n; ++i) {
317-
s += nums[i];
318-
while (j < n && s >= target) {
319-
ans = min(ans, i - j + 1);
320-
s -= nums[j++];
315+
for (int r = 0; r < n; ++r) {
316+
s += nums[r];
317+
while (s >= target) {
318+
ans = min(ans, r - l + 1);
319+
s -= nums[l++];
321320
}
322321
}
323-
return ans == n + 1 ? 0 : ans;
322+
return ans > n ? 0 : ans;
324323
}
325324
};
326325
```
@@ -329,18 +328,17 @@ public:
329328
330329
```go
331330
func minSubArrayLen(target int, nums []int) int {
332-
n := len(nums)
333-
s := 0
334-
ans := n + 1
335-
for i, j := 0, 0; i < n; i++ {
336-
s += nums[i]
331+
l, n := 0, len(nums)
332+
s, ans := 0, n+1
333+
for r, x := range nums {
334+
s += x
337335
for s >= target {
338-
ans = min(ans, i-j+1)
339-
s -= nums[j]
340-
j++
336+
ans = min(ans, r-l+1)
337+
s -= nums[l]
338+
l++
341339
}
342340
}
343-
if ans == n+1 {
341+
if ans > n {
344342
return 0
345343
}
346344
return ans
@@ -352,16 +350,15 @@ func minSubArrayLen(target int, nums []int) int {
352350
```ts
353351
function minSubArrayLen(target: number, nums: number[]): number {
354352
const n = nums.length;
355-
let s = 0;
356-
let ans = n + 1;
357-
for (let i = 0, j = 0; i < n; ++i) {
358-
s += nums[i];
353+
let [s, ans] = [0, n + 1];
354+
for (let l = 0, r = 0; r < n; ++r) {
355+
s += nums[r];
359356
while (s >= target) {
360-
ans = Math.min(ans, i - j + 1);
361-
s -= nums[j++];
357+
ans = Math.min(ans, r - l + 1);
358+
s -= nums[l++];
362359
}
363360
}
364-
return ans ===n+1 ? 0 : ans;
361+
return ans >n ? 0 : ans;
365362
}
366363
```
367364

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
class Solution {
22
public:
33
int minSubArrayLen(int target, vector<int>& nums) {
4-
int n = nums.size();
4+
int l = 0, n = nums.size();
55
long long s = 0;
66
int ans = n + 1;
7-
for (int i = 0, j = 0; i < n; ++i) {
8-
s += nums[i];
9-
while (j < n && s >= target) {
10-
ans = min(ans, i - j + 1);
11-
s -= nums[j++];
7+
for (int r = 0; r < n; ++r) {
8+
s += nums[r];
9+
while (s >= target) {
10+
ans = min(ans, r - l + 1);
11+
s -= nums[l++];
1212
}
1313
}
14-
return ans == n + 1 ? 0 : ans;
14+
return ans > n ? 0 : ans;
1515
}
16-
};
16+
};
Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
func minSubArrayLen(target int, nums []int) int {
2-
n := len(nums)
3-
s := 0
4-
ans := n + 1
5-
for i, j := 0, 0; i < n; i++ {
6-
s += nums[i]
2+
l, n := 0, len(nums)
3+
s, ans := 0, n+1
4+
for r, x := range nums {
5+
s += x
76
for s >= target {
8-
ans = min(ans, i-j+1)
9-
s -= nums[j]
10-
j++
7+
ans = min(ans, r-l+1)
8+
s -= nums[l]
9+
l++
1110
}
1211
}
13-
if ans ==n+1 {
12+
if ans >n {
1413
return 0
1514
}
1615
return ans
17-
}
16+
}
Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
class Solution {
22
public int minSubArrayLen(int target, int[] nums) {
3-
int n = nums.length;
3+
int l = 0, n = nums.length;
44
long s = 0;
55
int ans = n + 1;
6-
for (int i = 0, j = 0; i < n; ++i) {
7-
s += nums[i];
8-
while (j < n && s >= target) {
9-
ans = Math.min(ans, i - j + 1);
10-
s -= nums[j++];
6+
for (int r = 0; r < n; ++r) {
7+
s += nums[r];
8+
while (s >= target) {
9+
ans = Math.min(ans, r - l + 1);
10+
s -= nums[l++];
1111
}
1212
}
13-
return ans <= n ? ans : 0;
13+
return ans > n ? 0 : ans;
1414
}
15-
}
15+
}
Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
class Solution:
22
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
3-
n = len(nums)
4-
ans = n + 1
5-
s = j = 0
6-
for i, x in enumerate(nums):
3+
l = s = 0
4+
ans = inf
5+
for r, x in enumerate(nums):
76
s += x
8-
while j<nands >= target:
9-
ans = min(ans, i - j + 1)
10-
s -= nums[j]
11-
j += 1
12-
return ans if ans <=n else 0
7+
while s >= target:
8+
ans = min(ans, r - l + 1)
9+
s -= nums[l]
10+
l += 1
11+
return 0 if ans ==inf else ans
Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
function minSubArrayLen(target: number, nums: number[]): number {
22
const n = nums.length;
3-
let s = 0;
4-
let ans = n + 1;
5-
for (let i = 0, j = 0; i < n; ++i) {
6-
s += nums[i];
3+
let [s, ans] = [0, n + 1];
4+
for (let l = 0, r = 0; r < n; ++r) {
5+
s += nums[r];
76
while (s >= target) {
8-
ans = Math.min(ans, i - j + 1);
9-
s -= nums[j++];
7+
ans = Math.min(ans, r - l + 1);
8+
s -= nums[l++];
109
}
1110
}
12-
return ans ===n+1 ? 0 : ans;
11+
return ans >n ? 0 : ans;
1312
}

0 commit comments

Comments
(0)

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