209.长度最小的子数组 数组 双指针 滑动窗口

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int left = 0;
        int sum = 0;
        int length = Integer.MAX_VALUE ; 
        for(int right = 0; right < nums.length ; right++){
            sum+=nums[right];
            while(sum >= target){
                length = Math.min(length,right - left + 1);
                sum -= nums[left];
                left += 1;
            }
        }return length == Integer.MAX_VALUE ? 0:length;
    }
}

滑动窗口,重点在如何保持移动

  1. 未符合要求,右边界移动,直到满足要求;
  2. 符合要求,左边界移动,再查看是否满足要求,未满足,重复2;满足,重复1.
  3. 直至完成遍历

还有一个关键在于,如何获得最小的窗口长度,每次满足要求,窗口长度都会变化,如何能不断更新以获得其最小值。

因为只需要一个最小值,所以每次只保留一个值即可,这里选择用一个足够大的值与窗口值,即Integer.MAX_VALUE,第一次满足要求后,将获取到的窗口长度与其相比,取小。一定能够将length更新为此时的窗口长度,即length为第一次窗口长度。第二次比较时,length代表第一次窗口长度,right-left+1,为第二次满足要求的长度,以此类推

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 19:50:05       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 19:50:05       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 19:50:05       58 阅读
  4. Python语言-面向对象

    2024-07-17 19:50:05       69 阅读

热门阅读

  1. notes for datawhale 2th summer camp NLP task2

    2024-07-17 19:50:05       21 阅读
  2. linux学习笔记整理: 关于linux系统介绍 2024/7/16;

    2024-07-17 19:50:05       20 阅读
  3. 单例模式-C#

    2024-07-17 19:50:05       18 阅读
  4. 常用的系统层安全机制

    2024-07-17 19:50:05       21 阅读
  5. 什么是智能家居?

    2024-07-17 19:50:05       18 阅读
  6. C++的关键字const

    2024-07-17 19:50:05       21 阅读
  7. 服务端正常启动了,但是客户端请求不到

    2024-07-17 19:50:05       22 阅读
  8. QTextBrowser设置行号

    2024-07-17 19:50:05       23 阅读
  9. Webhook 是什么?详解其工作原理

    2024-07-17 19:50:05       22 阅读