Keshawn_lu's Blog

Leetcode 209. 长度最小的子数组

字数统计: 306阅读时长: 1 min
2020/06/28 Share

题目简介:

给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度如果不存在符合条件的连续子数组,返回 0。

示例:

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

思路:

设置双指针,起始均指向首元素,定义一个sum,表示子数组的累积和。

然后右指针开始向右移动,sum一直累加nums[right],直至sum >= s,此时左指针开始向右移动,sum依次减去nums[left],并每次保存sum >= s时的子数组长度,直至sum < s,此次遍历结束,开始下一次遍历。

tips:

  • 子数组长度为right - left + 1
  • 需要注意Min_len == 0时的特殊情况判断

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Solution {
public:
int minSubArrayLen(int s, vector<int>& nums) {

int left = 0;
int right = 0;
int Min_len = 0;

int sum = 0;

while(right < nums.size()){

sum += nums[right];

while(sum >= s){

if(Min_len == 0)
Min_len = right - left + 1;
else
Min_len = min(Min_len, right - left + 1);

sum -= nums[left];
left++;
}

right++;
}

return Min_len;

}
};
CATALOG
  1. 1. 题目简介:
  2. 2. 思路:
  3. 3. 代码如下: