9.《滑动窗口篇》---①长度最小的子数组(中等)

滑动窗口推导过程

我们不能说一上来就知道这个题目用滑动窗口,然后就使用滑动窗口的方法来做这个题目。

首先我们想到的应该是暴力解法。

接着再优化为滑动窗口

由于数字都是 ≥ 0 的数。因此累加的数越多。和越大。

因此right往后遍历的时候。当发现sum > target 就可以不用再往右移动了。

此时left往右移动一位。

按照暴力枚举。right 还需要从新回到left的位置。再次计算累加和是否≥target。

而我们发现 (使用暴力解法的时候两个指针可以不会退。就可以用滑动窗口了)

此时只需要让sum-2 然后再次判断。就可以了。而right不用移动。

这就引入了滑动窗口。

利用单调性,+同向双指针。

滑动窗口的使用:

1. left = 0,right =0;

2.进窗口

3.判断

4.出窗口

方法一:暴力解法

class Solution {public int minSubArrayLen(int target, int[] nums) {int n = nums.length;int minLen = Integer.MAX_VALUE;// 用于存储最短子数组的长度for(int i = 0; i < n; i++){int sum = 0;// 每次外层循环重新初始化sumfor(int j =i; j<n; j++){sum += nums[j];// 计算子数组的和if(sum >= target){// 如果子数组的和大于或等于目标值minLen = Math.min(j-i+1,minLen);// 更新最短长度break;// 提前结束当前内层循环,因为长度已经达到条件}}}return minLen == Integer.MAX_VALUE ? 0 : minLen;// 如果没有符合条件的子数组,返回0}
}   

复杂度分析 

  • 时间复杂度: O(n2)O(n^2)O(n2)(嵌套双重循环导致的平方复杂度)
  • 空间复杂度: O(1)O(1)O(1)(只使用了常量级别的额外空间)

 解法二:滑动窗口(利用单调性+ “同向双指针”)

1.left = 0,right = 0

2.进窗口。我们让right++,并且 sum += nums[right];

3.判断条件。使用while循环判断

4.出窗口:sum -= nums[left++];

注意:

判断条件的时候一定要使用while循环。而不是if。

因为left++一次之后。也可能继续满足条件。

如果使用 if 很可能会漏掉正确答案。

class Solution {public int minSubArrayLen(int target, int[] nums) {int n = nums.length;int minLen = Integer.MAX_VALUE;// 用于存储最短子数组的长度int sum = 0;for(int left = 0,right =0; right < n; right++){sum += nums[right];while(sum >= target){minLen = Math.min(right-left+1,minLen);sum -= nums[left++];}}return minLen == Integer.MAX_VALUE ? 0 : minLen;}
}  

复杂度分析

时间复杂度:O(n)。n是数组的长度。指针 left 和 right 最多各移动一次。

空间复杂度:O(1)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/60122.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Marin说PCB之电源完整性之电源网络的PDN仿真CST---04

小编我最近都要忙疯了&#xff0c;好不容易去韩国出个差&#xff0c;打算不忙的时候去首尔看看韩国的美女们&#xff0c;说错了&#xff0c;是看美景啊。谁料想韩国分公司的SI同事的李相赫同志由于结婚请假了一个多月啊&#xff0c;他倒是挺爽啊&#xff0c;和老婆去度蜜月了&a…

视频融合×室内定位×数字孪生

随着物联网技术的迅猛发展&#xff0c;室内定位与视频融合技术在各行各业中得到了广泛应用。不仅能够提供精确的位置信息&#xff0c;还能通过实时视频监控实现全方位数据的可视化。 与此同时&#xff0c;数字孪生等技术的兴起为智慧城市、智慧工厂等应用提供了强大支持&#…

git push时报错! [rejected] master -> master (fetch first)error: ...

错误描述&#xff1a;在我向远程仓库push代码时&#xff0c;即执行 git push origin master命令时发生的错误。直接上错误截图。 错误截图 错误原因&#xff1a; 在网上查了许多资料&#xff0c;是因为Git仓库中已经有一部分代码&#xff0c;它不允许你直接把你的代码覆盖上去…

Vite 基础理解及应用

文章目录 概要Vite基础知识点1. 快速启动和热更新热更新原理 2. 基于ES模块的构建3. 对不同前端框架的支持 vite.config.js配置实例1. 基本结构2. 服务器相关配置3. 输入输出路径配置4. 打包优化配置 项目构建一、项目初始化二、项目结构理解三、CSS处理四、静态资源处理五、构…

概念解读|K8s/容器云/裸金属/云原生...这些都有什么区别?

随着容器技术的日渐成熟&#xff0c;不少企业用户都对应用系统开展了容器化改造。而在容器基础架构层面&#xff0c;很多运维人员都更熟悉虚拟化环境&#xff0c;对“容器圈”的各种概念容易混淆&#xff1a;容器就是 Kubernetes 吗&#xff1f;容器云又是什么&#xff1f;容器…

【Android】线程池的解析

引言 在Android当中根据用途分为主线程与子线程&#xff0c;主线程当中主要处理与界面相关的操作&#xff0c;子线程主要进行耗时操作。除了Thread本身以外&#xff0c;在Android当中还有很多扮演者线程的角色&#xff0c;比如AsyncTask&#xff08; 底层为线程池&#xff0c;…

本地音乐服务器(三)

6. 删除音乐模块设计 6.1 删除单个音乐 1. 请求响应设计 2. 开始实现 首先在musicmapper新增操作 Music findMusicById(int id);int deleteMusicById(int musicId); 其次新增相对应的.xml代码&#xff1a; <select id"findMusicById" resultType"com.exa…

设计模式的基本概述

一.什么是设计模式 1.设计模式(Design Pattern)是前辈们对代码开发经验的总结&#xff0c;是解决特定问题的一系列套路&#xff0c;它不是语法规定&#xff0c;而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案 。 2.1995 年&#xff0c;GoF(Gang…

Rust:AtomicI8 还是 Mutex<u8>?

问题1&#xff1a; 选择 AtomicI8 还是 Mutex<u8>? 在比较AtomicI8和Mutex时&#xff0c;我们需要考虑多个方面&#xff0c;包括性能、使用场景、以及它们各自的特点。以下是对这两者的详细比较&#xff1a; 一、性能 AtomicI8&#xff1a; 使用CPU级别的原子操作&…

Spring Boot图书馆管理系统:疫情中的管理利器

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了疫情下图书馆管理系统的开发全过程。通过分析疫情下图书馆管理系统管理的不足&#xff0c;创建了一个计算机管理疫情下图书馆管理系统的方案。文章介绍了疫情下图…

集群聊天服务器(7)数据模块

目录 Mysql数据库代码封装头文件与源文件 Mysql数据库代码封装 业务层代码不要直接写数据库&#xff0c;因为业务层和数据层的代码逻辑也想完全区分开。万一不想存储mysql&#xff0c;想存redis的话&#xff0c;就要改动大量业务代码。解耦合就是改起来很方便。 首先需要安装m…

Linux第93步_Linux内核的LED灯驱动

Linux内核的LED灯驱动采用platfomm框架&#xff0c;因此我们只需要按照要求在“设备树文件”中添加相应的LED节点即可。 1 、通过“linux内核图形化配置界面”令“CONFIG_LEDS_GPIOy” 1)、打开终端&#xff0c;输入“cd linux/atk-mp1/linux/my_linux/linux-5.4.31/回车”&a…

Zmap+python脚本+burp实现自动化Fuzzing测试

声明 学习视频来自 B 站UP主泷羽sec&#xff0c;如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识&#xff0c;以下网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 ✍&#x1f3fb;作者简介&#xff1a;致…

红外相机和RGB相机外参标定 - 无需标定板方案

1. 动机 在之前的文章中红外相机和RGB相机标定&#xff1a;实现两种模态数据融合_红外相机标定-CSDN博客 &#xff0c;介绍了如何利用标定板实现外参标定&#xff1b;但实测下来发现2个问题&#xff1a; &#xff08;1&#xff09;红外标定板尺寸问题&#xff0c;由于标定板小…

统计学习模型相关知识简记

一、概念 1、定义 在监督学习过程中&#xff0c; 模型就是所要学习的条件概率分布或决策函数。 2、假设空间 模型的假设空间&#xff08;hypothesis space&#xff09;包含所有可能的条件概率分布或决策函数。 假设空间中的模型一般有无穷多个。 3、假设空间与决策函数 …

android:taskAffinity 对Activity退出时跳转的影响

android:taskAffinity 对Activity跳转的影响 概述taskAffinity 的工作机制taskAffinity对 Activity 跳转的影响一个实际的开发问题总结参考 概述 在 Android 开发中&#xff0c;任务栈&#xff08;Task&#xff09;是一个核心概念。它决定了应用程序的 Activity 如何相互交互以…

React——useCallback

一、定义&#xff1a; useCallback是一个允许你在多次渲染中缓存函数的 React Hook。它返回一个记忆化的回调函数&#xff0c;只有在依赖项改变时才会更新。这有助于避免在每次渲染时都创建新的函数实例&#xff0c;特别是在将回调函数传递给子组件时。 二、形式&#xff1a;…

Ubuntu常见命令

关于export LD_LIBRARY_PATHcmake默认地址CMakelists.txt知识扩充/home&#xff1a;挂载新磁盘到 /home 子目录 关于export LD_LIBRARY_PATH 程序运行时默认的依赖库的位置包括lib, /usr/lib ,/usr/local/lib 通过命令export LD_LIBRARY_PATHdesired_path:$LD_LIBRARY_PATH追加…

时间类的实现

在现实生活中&#xff0c;我们常常需要计算某一天的前/后xx天是哪一天&#xff0c;算起来十分麻烦&#xff0c;为此我们不妨写一个程序&#xff0c;来减少我们的思考时间。 1.基本实现过程 为了实现时间类&#xff0c;我们需要将代码写在3个文件中&#xff0c;以增强可读性&a…

Java API 进阶指南:从核心API到高级应用的全面提升

文章目录 Java API 进阶学习指南1. 深入理解核心API1.1 集合框架&#xff08;Collections Framework&#xff09;1.2 输入输出流&#xff08;I/O Streams&#xff09;1.3 并发编程&#xff08;Concurrency&#xff09;1.4 反射&#xff08;Reflection&#xff09;1.5 泛型&…