【滑动窗口算法】-- 长度最小的子数组

news/2025/2/26 18:25:31

文章目录

  • 1. 题目
  • 2. 题目解析
  • 3. 代码

1. 题目

在线oj
给定一个含有 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

提示:

java">1 <= target <= 109
1 <= nums.length <= 105
1 <= nums[i] <= 104

进阶:

如果你已经实现 O(n) 时间复杂度的解法, 请尝试设计一个 O(n log(n)) 时间复杂度的解法。

2. 题目解析

解法一:暴力枚举出所有子数组的和
时间复杂度是O(n^2)。
解法二:利用单调性,使用“同向双指针”来进行优化

  • 什么滑动窗口?
    同向双指针就是滑动窗口
  • 什么时候使用滑动窗口?
    当使用利用单调性,使用同向双指针的时候
  • 怎么使用****滑动窗口
  1. left = 0, right = 0
  2. 进窗口
  3. 更新结果(根据题目判断有没有这一步,这一步放在哪里)
  4. 出窗口

在这里插入图片描述
接下来我们使用这组数来进行演示:
在这里插入图片描述
首先定义两个指针 left 和 right ,分别指向数组下标为0的位置,并定义sum(记录窗口内所有数的总和) 和 len(记录最小子数组的长度)。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3. 代码

java">class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int n = nums.length;
        int len = Integer.MAX_VALUE;
        int sum = 0;
        for (int left = 0, right = 0; right < n; right++) {
            sum = sum + nums[right];//进窗口
            while (sum >= target){//判断
                len = Math.min(len, right - left + 1);//更新
                sum = sum - nums[left++];//出窗口
            }
            
        }
        return len == Integer.MAX_VALUE ? 0 : len;
    }
}

http://www.niftyadmin.cn/n/5869053.html

相关文章

Java如何解决彻底解决,大数据量excel导出内存溢出问题

一、核心工具选型&#xff1a;流式处理框架 1. 使用EasyExcel&#xff08;推荐&#xff09; 阿里巴巴开源的EasyExcel基于流式读写设计&#xff0c;通过逐行处理数据避免内存堆积。 优势&#xff1a; 内存占用低&#xff0c;支持百万级数据导出&#xff1b; 内置分页写入、自…

办公自动化|xlwings使用公式和函数

1. 介绍 xlwings xlwings 是一个强大的 Python 库&#xff0c;能够用于 Excel 自动化操作。除了基本的数据读写和格式设置&#xff0c;xlwings 还支持写入 Excel 公式、调用内置函数以及创建自定义函数&#xff0c;使得 Python 与 Excel 之间的交互更加灵活。 2. 在单元格中使…

智慧城市与安防监控:PoE交换机在高清视频监控中的优势

安防监控系统&#xff0c;尤其是高清摄像头&#xff08;如IP摄像头、PTZ云台、热成像摄像头&#xff09;在现代安防应用中大量部署&#xff0c;这些设备对电力和数据的传输需求非常高。传统的电源布线方式往往不能满足大规模、高质量设备的需求&#xff0c;而PoE交换机不仅解决…

跳跃游戏两则

跳跃游戏 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 思路 这里只…

Linux | RHEL / CentOS 中 YUM history / downgrade 命令回滚操作

注&#xff1a;英文引文&#xff0c;机翻未校。 在 RHEL/CentOS 系统上使用 YUM history 命令回滚升级操作 作者&#xff1a; 2daygeek 译者&#xff1a; LCTT DarkSun 为服务器打补丁是 Linux 系统管理员的一项重要任务&#xff0c;为的是让系统更加稳定&#xff0c;性能更加…

Web核心、HTTP

JavaWeb技术栈 B/S 架构:Browser/Server&#xff0c;浏览器/服务器 架构模式&#xff0c;它的特点是&#xff0c;客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务器端。浏览器只需要请求服务器&#xff0c;获取Web资源&#xff0c;服务器把Web资源发送给浏览…

智慧物流小程序(论文源码调试讲解)

第4章 系统设计 一个成功设计的系统在内容上必定是丰富的&#xff0c;在系统外观或系统功能上必定是对用户友好的。所以为了提升系统的价值&#xff0c;吸引更多的访问者访问系统&#xff0c;以及让来访用户可以花费更多时间停留在系统上&#xff0c;则表明该系统设计得比较专…

2.部署kafka:9092

官方文档&#xff1a;http://kafka.apache.org/documentation.html (虽然kafka中集成了zookeeper,但还是建议使用独立的zk集群) Kafka3台集群搭建环境&#xff1a; 操作系统: centos7 防火墙&#xff1a;全关 3台zookeeper集群内的机器&#xff0c;1台logstash 软件版本: …