209题目:
给定一个含有 n
个正整数的数组和一个正整数 target
。
找出该数组中满足其和 ≥ target
的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr]
,并返回其长度。如果不存在符合条件的子数组,返回 0
。
示例 1:
输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3]
是该条件下的长度最小的子数组。
示例 2:
输入:target = 4, nums = [1,4,4] 输出:1
示例 3:
输入:target = 11, nums = [1,1,1,1,1,1,1,1] 输出:0
使用滑动窗口的思想,一个是快指针j率先寻找符合大于等于traget的元素数目,然后用慢指针向后移一位,观察少了一个元素是否还依然和大于target元素
C语言
define min(a,b) ((a) < (b) ? (a) : (b))
int minSubArrayLen(int target, int* nums, int numsSize)
{
int i=0;
int j=0;
int result=INT_MAX;
int sum=0;
for(j=0;j<numsSize;j++)
{
sum=sum+nums[j];
while (sum>=target)
{
int lenth=j-i+1;
result=min(lenth,result);
sum=sum-nums[i];
i++;
}
}
return result!=INT_MAX?result:0;
}
python 语言
class Solution(object):
def minSubArrayLen(self, target, nums):
"""
:type target: int
:type nums: List[int]
:rtype: int
"""
i=0
j=0
sum=0
result=float('inf')
for j in range(len(nums)):
sum=sum+nums[j]
while sum>=target:
lenth=j-i+1
result=min(lenth,result)
sum=sum-nums[i]
i+=1
return result if result != float('inf') else 0
注意事项:c语言没有min,max函数,需要自己定义,可以使用三目条件操作符,格式为exp1?exp2:exp3.意思是exp1成立则输出exp2,exp1不成立则输出exp3。C 语言最大int值可以定位为INT_MAX.
python 语言中,最大正无穷int值可以定义为,float(‘inf’).