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

[pull] main from itcharge:main #34

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
pull merged 22 commits into AlgorithmAndLeetCode:main from itcharge:main
Aug 26, 2022
Merged
Changes from 1 commit
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
096cb11
Update 0167. 两数之和 II - 输入有序数组.md
itcharge Aug 24, 2022
dee78d6
Update 0473. 火柴拼正方形.md
itcharge Aug 25, 2022
70eb9e0
Update 0003. 无重复字符的最长子串.md
itcharge Aug 25, 2022
4073c18
Update 0011. 盛最多水的容器.md
itcharge Aug 25, 2022
f95ab04
Update 0015. 三数之和.md
itcharge Aug 25, 2022
4e75720
Update 0026. 删除有序数组中的重复项.md
itcharge Aug 25, 2022
3b372d4
Update 0080. 删除有序数组中的重复项 II.md
itcharge Aug 25, 2022
4fa1bb6
Update 0125. 验证回文串.md
itcharge Aug 25, 2022
b5c9af4
Update 0167. 两数之和 II - 输入有序数组.md
itcharge Aug 25, 2022
14c770a
Update 0344. 反转字符串.md
itcharge Aug 25, 2022
1084fe7
Update 0349. 两个数组的交集.md
itcharge Aug 25, 2022
7a28f76
Update 1343. 大小为 K 且平均值大于等于阈值的子数组数目.md
itcharge Aug 25, 2022
b3e6cee
Update 01.Array-Two-Pointers.md
itcharge Aug 25, 2022
910d51d
Update 0027. 移除元素.md
itcharge Aug 26, 2022
2d26e41
Update 0209. 长度最小的子数组.md
itcharge Aug 26, 2022
6d0fabe
Update 0220. 存在重复元素 III.md
itcharge Aug 26, 2022
21d9781
Update 0283. 移动零.md
itcharge Aug 26, 2022
cbe4524
Update 0674. 最长连续递增序列.md
itcharge Aug 26, 2022
31eae85
Update 0713. 乘积小于K的子数组.md
itcharge Aug 26, 2022
5662489
Update 1004. 最大连续1的个数 III.md
itcharge Aug 26, 2022
dd52597
Update 01.Array-Sliding-Window.md
itcharge Aug 26, 2022
b36df61
更新题解列表
itcharge Aug 26, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Update 0209. 长度最小的子数组.md
  • Loading branch information
itcharge committed Aug 26, 2022
commit 2d26e41170628bf7686c18f6603a264f5ac12d60
41 changes: 33 additions & 8 deletions Solutions/0209. 长度最小的子数组.md
View file Open in desktop
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,43 @@

## 题目大意

给定一个只包含正整数的数组 `nums` 和一个正整数 `target`。
**描述**:给定一个只包含正整数的数组 `nums` 和一个正整数 `target`。

要求:找出数组中满足和大于等于 `target` 的长度最小的「连续子数组」,并返回其长度。如果不存在符合条件的子数组,返回 `0`。
**要求**:找出数组中满足和大于等于 `target` 的长度最小的「连续子数组」,并返回其长度。如果不存在符合条件的子数组,返回 `0`。

**说明**:

- 1ドル \le target \le 10^9$。
- 1ドル \le nums.length \le 10^5$。
- 1ドル \le nums[i] \le 10^5$。

**示例**:

```Python
输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。


输入:target = 4, nums = [1,4,4]
输出:1
```

## 解题思路

### 思路 1:滑动窗口(不定长度)

最直接的做法是暴力枚举,时间复杂度为 $O(n^2)$。但是我们可以利用滑动窗口的方法,在时间复杂度为 $O(n)$ 的范围内解决问题。

用滑动窗口来记录连续子数组的和,设定两个指针:`left`、`right`,分别指向滑动窗口的左右边界,保证窗口中的和刚好大于等于 `target`。

- 一开始,`left`、`right` 都指向 `0`。
- 向右移动 `right`,将最右侧元素加入当前窗口和 `window_sum` 中。
- 如果 `window_sum >= target`,则不断右移 `left`,缩小滑动窗口长度,并更新窗口和的最小值,直到 `window_sum < target`。
- 然后继续右移 `right`,直到 `right >= len(nums)` 结束。
- 输出窗口和的最小值作为答案。
1. 一开始,`left`、`right` 都指向 `0`。
2. 向右移动 `right`,将最右侧元素加入当前窗口和 `window_sum` 中。
3. 如果 `window_sum >= target`,则不断右移 `left`,缩小滑动窗口长度,并更新窗口和的最小值,直到 `window_sum < target`。
4. 然后继续右移 `right`,直到 `right >= len(nums)` 结束。
5. 输出窗口和的最小值作为答案。

##代码
### 思路 1:代码

```Python
class Solution:
Expand All @@ -45,3 +65,8 @@ class Solution:
return ans if ans != size + 1 else 0
```

### 思路 1:复杂度分析

- **时间复杂度**:$O(n)$。
- **空间复杂度**:$O(1)$。

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