力扣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

提示:

  • 1 <= target <= 109
  • 1 <= nums.length <= 105
  • 1 <= nums[i] <= 105

方法一:暴力(会超出时间限制)

思想,利用两个for循环,从前往后遍历数组,找出该数组中满足其总和大于等于target的长度最小的 子数组。

代码:

复制代码
int minSubArrayLen(int s, int* nums, int numsSize) {
    if (numsSize == 0) {
        return 0;
    }
    int ans = INT_MAX;
    for (int i = 0; i < numsSize; i++) {
        int sum = 0;
        for (int j = i; j < numsSize; j++) {
            sum += nums[j];
            if (sum >= s) {
                ans = fmin(ans, j - i + 1);
                break;
            }
        }
    }
    return ans == INT_MAX ? 0 : ans;
}

时间复杂度O(n^2);空间复杂度O(1)

方法二:滑动窗口

思想:定义两个指针i和j,i表示起始位置,j表示结束位置。开始时,将最小距离设置成INT_MAX。开始时,i不变,从移动前往后移动j遍历数组,计算总和sum,当sum大于等于target时,将result更新为最小距离。并将sum减去numsi,将i往后面遍历。最后去result的最小值。

输入: target = 7, nums = 2,3,1,2,4,3 **输出:**2

开始i=0,j=0,numsi=numj=2;移动j,进行遍历。直到sum=2+3+1+2=8>target时,result=j-i+1=4;sum=3+1+2=6;i=1;继续往后遍历。

i=1,j=3,移动j,直到sum=3+1+2+4=10时,result=4,sum=1+2+4=7;i=2;继续往后遍历。

此时sum=7,result=j-i+1=3;sum=2+4=6,i=3;继续往后遍历。

i=3,j=4,移动j,直到sum=2+4+3=9时,result=j-i+1=3;sum=4+3=7,i=4;继续往后遍历。

此时sum=7,result=j-i+1=2;j无法再往后循环,最后最小值为result=2

复制代码
int minSubArrayLen(int target, int* nums, int numsSize) {
    if (numsSize == 0) {
        return 0;
    }
    int result = INT_MAX;
    int i=0,j=0,sum=0;
    while(j<numsSize){
        sum += nums[j];
        while(sum >= target){
            result=fmin(result,j-i+1);
            sum -=nums[i];
            i++;
        }
        j++;
    }
    return result==INT_MAX ? 0:result;
}

时间复杂度O(n);空间复杂度O(1)

相关推荐
典典分享指南1 小时前
VS Code Git 工作树:解锁多分支并行开发新体验
算法·决策树·逻辑回归·启发式算法
_Narcissus_1 小时前
枚举和模拟算法笔记
c语言·数据结构·c++·笔记·算法·模拟·枚举
天疆说1 小时前
策略的进化:从随心所欲到稳健前行
算法
冻柠檬飞冰走茶2 小时前
《数据结构实验指导-C++语言版》 在顺序表 list 中查找元素 x
开发语言·数据结构·c++·算法·list
Brilliantwxx2 小时前
【C++】 高阶数据结构图(1)并查集
开发语言·数据结构·c++
冻柠檬飞冰走茶2 小时前
《数据结构实验指导-C++语言版》 返回单链表 list 中第 i 个元素值
开发语言·数据结构·c++·算法·list
happyprince3 小时前
03-深刻观-CodeX哲学与升华(源码)
算法·ai编程
不会打球的王子3 小时前
Day 27:迁移学习与微调 — 站在巨人的肩膀上
算法
数模竞赛Paid answer3 小时前
2025年中青杯数学建模A题康养城市建设求解全过程论文及程序
算法·数学建模·数据分析·中青杯
网安蟹佬霸4 小时前
密码学安全实战:从加密原理到哈希破解的完整攻防指南
网络·算法·安全·web安全·开源·密码学·哈希算法