LeetCode209长度最小的子数组,滑动窗口实现(java)

今天我们来分享一下LeetCode209的解题方法,话不多说上题目。

注意,拿到题之后,要认真审题,题目中描述是连续的子数组。

实现方法:滑动窗口

解题思路:我们用下面的例子来进行描述。

我们定义两个指针,用左右指针同时指向第一个位置,让右指针进行滑动,也就是对数组进行遍历,并对值进行累加,当发现累加值sum大于等于target时,右指针停止,(在上述例子中右指针会停留在数组下标为3的位置)并对子数组长度进行记录,此时用累加值sum减去左指针指向的元素,将left向后移动一个位置,并检查累加值sum是否还大于等于target,如果还大于target,还是用累加值sum减去左指针指向的元素,并将left向后移动一个位置。如果发现用累加值sum减去left指针指向的元素后,sum小于了target,此时移动right指针,并对元素进行累加,直至累加值sum大于等于target,然后还是重复用累加值sum减去左指针指向的元素...

我们用本例来对上述方案进行说明。

首先right指针指向数组下标为3的位置,发现sum大于等于target,并记录子数组的长度为4,然后用sum减去nums[left],并将left指针向后移动一位,发现8-2=6,累加值sum小于了target,此时right向后移动,移动到数组下标为4的地方,发现累加值大于target,此时子数组长度还是4,然后用累加值sum减去nums[left],并将left向后移动一个位置,此时是10-3=7,此时7还是满足大于等于target,然后更新子数组长度为3。然后继续减去nums[left]...直至找到满足条件的最小子数组。

我们的一个大概思路是这样的,具体的代码实现如下:

如果说觉得不太懂的可以debug下,看看代码的运行过程。

java 复制代码
class Solution {
    public int minSubArrayLen(int target, int[] nums) {
  int left=0;
        int right=0;
        int len=nums.length-1;
        int sum=0;
        int res=Integer.MAX_VALUE;
        int l=0;
        while (right<=len){
            sum+=nums[right];
            while (sum>=target&&left<=right){
                l=right-left+1;
                res=Math.min(res,l);
                sum-=nums[left];
                left++;
            }

            right++;
        }
        if (l==0){
            return l;
        }
        return res;

    }
}

好了,那么今天的题目分享到这里就结束了,如果觉得对你有帮助希望给博主点个小爱心谢谢!(●ˇ∀ˇ●)!

相关推荐
带刺的坐椅7 分钟前
qwen3 惊喜发布,用 ollama + solon ai (java) 尝个鲜
java·spring·solon·solon-ai·qwen3
香蕉可乐荷包蛋30 分钟前
Python面试问题
开发语言·python·面试
Vacant Seat35 分钟前
贪心算法-跳跃游戏II
算法·游戏·贪心算法
ErizJ40 分钟前
Golang|分布式索引架构
开发语言·分布式·后端·架构·golang
.生产的驴41 分钟前
SpringBoot 接口国际化i18n 多语言返回 中英文切换 全球化 语言切换
java·开发语言·spring boot·后端·前端框架
夜松云44 分钟前
从对数变换到深度框架:逻辑回归与交叉熵的数学原理及PyTorch实战
pytorch·算法·逻辑回归·梯度下降·交叉熵·对数变换·sigmoid函数
Howard_Stark1 小时前
Spring的BeanFactory和FactoryBean的区别
java·后端·spring
饮长安千年月1 小时前
学生管理系统审计
java·网络安全·代码审计
八股文领域大手子1 小时前
深入浅出限流算法(三):追求极致精确的滑动日志
开发语言·数据结构·算法·leetcode·mybatis·哈希算法
-曾牛1 小时前
Spring Boot中@RequestParam、@RequestBody、@PathVariable的区别与使用
java·spring boot·后端·intellij-idea·注解·spring boot 注解·混淆用法