力扣:209.长度最小的子数组

1.题目分析:

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

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

示例 1:

复制代码
输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 
[4,3]
 是该条件下的长度最小的子数组。

1.找出连续子数组

2.最短长度

3.特殊情况:数组总和小于target,返回零

2.算法分析:

方法一:暴力枚举:时间复杂度是O(n^3)

设置两个指针,分别表示子数组的开始和子数组的结束两层for循环,最后求子数组总和一个while,自己在脑子想想,跑不过,我就不画图,写代码了哈。

方法二:在暴力枚举的方法上做出改进-->滑动窗口,还是用了双指针,和单调性,全是正数会越加越大,让两个指针同向移动来实现优化

滑动窗口步骤:1.进入窗口

2.判断窗口

3.退出窗口

例一图示(target = 7, nums = [2,3,1,2,4,3]):

3.代码编写:

java 复制代码
public static int minSubArrayLen(int target, int[] nums) {
        int sum=0;
        int count=Integer.MAX_VALUE;
        int left=0;
        int right=0;
        for(left=0,right=0;right<nums.length;right++)
        {
            sum+=nums[right];//进窗口
            while (sum>=target)//判断
            {
                count=Math.min(count,right-left+1);
                sum-=nums[left++];//出窗口
            }

        }
        if(count==Integer.MAX_VALUE)
        {
            return 0;
        }

        return count;
    }
相关推荐
settingsun12251 分钟前
【AI-算法-01】ResNet (残差网络) & Skip Connections
人工智能·算法
橘颂TA21 分钟前
【剑斩OFFER】算法的暴力美学——两数之和
数据结构·算法·leetcode·力扣·结构与算法
福楠29 分钟前
C++ STL | vector
开发语言·c++·算法
云里雾里!33 分钟前
力扣 268. 缺失数字 ✅ 【位运算(异或)最优解法】深度解析
算法·leetcode
kaikaile199540 分钟前
ISODATA聚类方法在MATLAB中的实现指南
算法·matlab·聚类
梭七y43 分钟前
【力扣hot100题】(122)回文链表
算法·leetcode·链表
J_liaty1 小时前
雪花主键(Snowflake ID)算法详解
算法
tobias.b1 小时前
408真题-2009-7-数据结构-无向连通图性质
数据结构·算法·408考研·408真题·真题解析
阿猿收手吧!1 小时前
【C++】JSON核心数据结构解析及JSONCPP使用
数据结构·c++·json
leo__5201 小时前
基于C语言的FOC算法核心模块实现
c语言·算法·机器学习