0%

leetCode-209:Minimum Size Subarray Sum

问题描述

给定一个正整数数组和一个正整数,要求找出数组中连续子数组的元素和等于目标元素,返回最小的子数组的元素个数。如果没有满足要求,则返回 0 。题目链接:**点我**

样例输入输出

输入:target = 7, nums = [2,3,1,2,4,3]

输出:2

输入:target = 11, nums = [1,1,1,1,1,1,1,1]

输出:0

问题解法

使用首尾两个指针表示子数组的范围。首先,移动右边指针直到子数组元素和大于等于目标数字,计算此刻的子数组元素个数,然后移动左边的指针,直至子数组元素和小于目标数字。在这个过程中,不断更新最小子数组的元素个数。待遍历结束,判断是否有满足要求的子数组,如果有,则返回计算出来的最小子数组元素个数,如果没有,则返回 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
class Solution
{
public int minSubArrayLen(int target, int[] nums)
{
int start = 0;
int end = start;
int sum = 0;
int count = Integer.MAX_VALUE;
while (end < nums.length)
{
sum += nums[end];
end++;

while (sum >= target)
{
count = Math.min(count, end - start);
if (count == 1)
{
return 1;
}

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

return count == Integer.MAX_VALUE ? 0 : count;
}
}