力扣题目链接

给定一个含有n个正整数的数组和一个正整数target

找出该数组中满足其和≥ target的长度最小的连续子数组[numsl, numsl+1, ..., numsr-1, numsr],并返回其长度。如果不存在符合条件的子数组,返回0

思路

滑动窗口

int minSubArrayLen(int target, int* nums, int numsSize){
    int left = 0, right = 0, sum = 0;

    int max = INT_MAX;

    while (left < numsSize && right < numsSize) {
        sum += nums[right];
        // 注意这里使用while,判断sum是否大于target,大于则缩小窗口,left右移,直到sum小于target
        while (sum >= target) {
            max = (right - left + 1) < max ? (right - left + 1) : max;
            sum -= nums[left];
            left++ ;
        }
        // 窗口一直增大,right右移
        right++;
    }

    return max < INT_MAX ? max : 0;
}
最后修改:2024 年 11 月 05 日
如果觉得我的文章对你有用,请随意赞赏