代码随想录刷题day04|(数组篇)209.长度最小的子数组

目录

一、数组理论基础

二、滑动窗口法

三、相关算法题目

四、相关知识点

1.三元运算符

2.表示MAX值的常量

3.全局变量和局部变量

五、心得


一、数组理论基础

数组是存放在连续内存空间上的相同类型数据的集合。

代码随想录 (programmercarl.com)

特点:

1.下标从0开始,内存中地址空间是连续的

2.查询快,增删慢

3.二维数组中,行为第一索引,列为第二索引

4.一旦创建以后,长度不能发生变化

5.元素无法删除,只能被覆盖

二、滑动窗口法

数组操作中的另一个重要方法。

思想:用一个for循环,不断调节子序列的起始位置和终止位置,从而获得对应结果。

假设用变量 j 指向起始位置,那么终止位置要把后面每一个元素遍历一遍,得到以 j 指向的变量 为开头的所有子序列的集合,然后选出满足目标的子序列,再得到长度最小值,这样的话,思想就和暴力法一样了。

所以,变量 j 应该指向终止位置起始位置用动态移动的策略去移动,用一个for循环实现要求。

起始位置首先指向0索引位置,终止位置随着for循环依次往后移动,并依次计算起始位置到终止位置所包含子序列的数值之和,同时比较更新最小长度值,当子序列数值之和≥目标值时,起始位置开始依次向前移动,更新子序列数值之和,不断重复这个过程,直到子序列数值之和<目标值,起始位置停止移动,终止位置继续随着for循环向后移动,不断重复这个过程。

其实内在原理依然是以每个元素为起始点,寻找满足目标值的子序列的集合,但滑动窗口是在每个元素为起始点的所有子序列集合中找到数值之和满足要求并且长度最小的那个子序列,比较各个最短长度,返回最终结果。

三、相关算法题目

209.长度最小的子数组 

209. 长度最小的子数组 - 力扣(LeetCode)

暴力法和滑动窗口法

暴力法(力扣上已超时)

思想:一个for循环滑动窗口的起始位置,一个for循环为滑动窗口的终止位置,用双层for循环获得所有子序列的和,然后找到满足要求的子序列,并返回对应长度。

class Solution {public int minSubArrayLen(int target, int[] nums) {//暴力法 双层for循环 已超时int subL = 0; //子序列的长度int result = Integer.MAX_VALUE; //最终结果 返回的最小长度for(int i = 0;i < nums.length;i++){ //设置子序列起点为iint sum = 0; //子序列的数值之和for(int j = i;j < nums.length;j++){ //设置子序列终点为jsum = sum + nums[j]; if(sum >= target){ subL = j - i + 1; //取子序列长度result = result > subL ? subL: result;break; //因为是找长度最小 所以一旦符合条件就退出本次循环}}}return result == Integer.MAX_VALUE ? 0: result; //如果result没有被赋值的话就返回0 说明没有满足条件的子序列}
}

 滑动窗口法(重点掌握)

class Solution {public int minSubArrayLen(int target, int[] nums) {//滑动窗口法(双指针法)int sum = 0;// 子序列的数值之和int i = 0;// 设置子序列的起点int subL = 0;// 子序列的长度int result = Integer.MAX_VALUE;//最终结果即最小长度for(int j = 0;j < nums.length;j++){sum = sum + nums[j];while(sum >= target){subL = j - i + 1;//取子序列长度result = result < subL ? result : subL;sum = sum - nums[i];i++; //起点往前滑动一个位置}}return result == Integer.MAX_VALUE ? 0 : result;//如果result没有被赋值的话就返回0 说明没有满足条件的子序列}
}

四、相关知识点

1.三元运算符

格式: 关系表达式 ? 表达式1 :表达式2 ;

计算关系表达式的值,如果为真,执行表达式1,如果为假,执行表达式2;

注意:该结果一定要被使用,要么赋值给一个变量,要么直接打印出来;

2.表示MAX值的常量

在java中,使用Integer.MAX_VALUE来表示一个非常大的整数,等同于 C++ 中的INT32_MAX。Integer.MAX_VALUE的值是2^31 - 1,即 2147483647。

3.全局变量和局部变量

全局变量:类的成员变量,定义在类中方法外部的变量,作用域是整个类;

局部变量:只在方法内定义的变量,作用域仅限于该方法;

result和sum(暴力法中)的区别

特性resultsum
作用域局部变量(方法级别)局部变量(内层循环级别)
生命周期整个方法执行过程每次外层 i 循环从开始到结束之间
初始值nums.length(初始化为数组长度)0
更新频率在满足条件时更新在内层 j 循环中进行累加(一旦 i 循环进入下一次迭代,sum 会被重新赋值为0,其值不会跨越不同的 i 循环)

五、心得

1.一开始没有考虑到 {如果不存在符合条件的子数组,返回 0} 的情况;

2.暴力法中,一旦找到符合条件的sum值,就可以使用break退出本次循环;

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

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

相关文章

Springboot——钉钉(站内)实现登录第三方应用

文章目录 前言准备1、创建钉钉应用&#xff0c;并开放网页应用2、配置网页应用各项参数发布版本 前端改造后端逻辑1、获取应用免登录 Access_token2、通过免登录 Access_token 和 Auth_Code 获取对应登录人信息 注意事项 前言 PC端的钉钉中工作台&#xff0c;增加第三方应用&a…

完美解决VMware 17.0 Pro安装ubuntu、Deepin等虚拟机后卡顿、卡死问题

这两天在 VM 17 Pro 中安装了ubuntu 24.1 和Deepin 23.9 等Linux操作系统&#xff0c;在使用过程中出现过数次卡顿、卡死问题&#xff0c;现记录整理解决方法如下&#xff1a; 一、问题描述 安装虚拟机时、以及安装完成后正常使用时出现鼠标点击卡顿、系统反应慢、卡死等问题…

计算机的错误计算(二百零七)

摘要 利用两个数学大模型计算 arccot(0.125664e2)的值&#xff0c;结果保留16位有效数字。 实验表明&#xff0c;它们的输出中分别仅含有3位和1位正确数字。 例1. 计算 arccot(0.125664e2)的值&#xff0c;结果保留16位有效数字。 下面是与一个数学解题器的对话。 以上为与…

Linux内核TTY子系统有什么(6)

接前一篇文章&#xff1a;Linux内核TTY子系统有什么&#xff08;5&#xff09; 本文内容参考&#xff1a; Linux TTY子系统框架-CSDN博客 一文彻底讲清Linux tty子系统架构及编程实例-CSDN博客 linux TTY子系统(3) - tty driver_sys tty device driver-CSDN博客 Linux TTY …

03_Redis基本操作

1.Redis查询命令 1.1 官网命查询命令 为了便于学习Redis,官方将其用于操作不同数据类型的命令进行了分类整理。你可以通过访问Redis官方网站上的命令参考页面https://redis.io/commands来查阅这些分组的命令,这有助于更系统地理解和使用Redis的各项功能。 1.2 HELP查询命令…

@LocalBuilder装饰器: 维持组件父子关系

一、前言 当开发者使用Builder做引用数据传递时&#xff0c;会考虑组件的父子关系&#xff0c;使用了bind(this)之后&#xff0c;组件的父子关系和状态管理的父子关系并不一致。为了解决组件的父子关系和状态管理的父子关系保持一致的问题&#xff0c;引入LocalBuilder装饰器。…

kubernetes第七天

1.影响pod调度的因素 nodeName 节点名 resources 资源限制 hostNetwork 宿主机网络 污点 污点容忍 Pod亲和性 Pod反亲和性 节点亲和性 2.污点 通常是作用于worker节点上&#xff0c;其可以影响pod的调度 语法&#xff1a;key[value]:effect effect:[ɪˈfek…

FFmpeg Muxer HLS

使用FFmpeg命令来研究它对HLS协议的支持程度是最好的方法&#xff1a; ffmpeg -h muxerhls Muxer HLS Muxer hls [Apple HTTP Live Streaming]:Common extensions: m3u8.Default video codec: h264.Default audio codec: aac.Default subtitle codec: webvtt. 这里面告诉我…

maven高级(day15)

Maven 是一款构建和管理 Java 项目的工具 分模块设计与开发 所谓分模块设计&#xff0c;顾名思义指的就是我们在设计一个 Java 项目的时候&#xff0c;将一个 Java 项目拆分成多 个模块进行开发。 分模块设计我们在进行项目设计阶段&#xff0c;就可以将一个大的项目拆分成若干…

【json】

JSON JSON是一种轻量级的,按照指定的格式去组织和封装数据的数据交互格式。 本质上是一个带有特定格式的字符串(py打印json时认定为str类型) 在各个编程语言中流通的数据格式&#xff0c;负责不同编程语言中的数据传递和交互,类似于计算机普通话 python与json关系及相互转换…

计算机网络 笔记 数据链路层 2

1,信道划分&#xff1a; (1)时分复用TDM 将时间等分为“TDM帧”&#xff0c;每个TDM帧内部等分为m个时隙&#xff0c;m个用户对应m个时隙 缺点&#xff1a;每个节点只分到了总带宽的1/m,如果有部分的1节点不发出数据&#xff0c;那么就会在这个时间信道被闲置&#xff0c;利用…

OpenPCDet从环境配置到模型训练

一、环境安装: 操作系统 :ubuntu 20.04+docker [11.8.0-cudnn8-devel-ubuntu18.04] 代码下载地址:GitHub - open-mmlab/OpenPCDet: OpenPCDet Toolbox for LiDAR-based 3D Object Detection.OpenPCDet Toolbox for LiDAR-based 3D Object Detection. - open-mmlab/OpenPCD…

【Python】Python与C的区别

文章目录 语句结束符代码块表示变量声明函数定义注释格式Python的标识符数据输入input()函数数据输出print()函数 语句结束符 C 语言 C 语言中每条语句必须以分号;结束。例如&#xff0c;int a 10;、printf("Hello, World!");。分号是语句的一部分&#xff0c;用于…

了解模2除法:原理与应用

模2除法&#xff0c;也被称为二进制除法或XOR除法&#xff0c;是一种在二进制数制下进行的特殊除法运算。与常规的十进制或其他进制的除法不同&#xff0c;模2除法使用异或&#xff08;XOR&#xff09;运算代替减法&#xff0c;并且不涉及进位或借位。这种除法运算在数字通信、…

【GESP】C++二级练习 luogu-B2079, 求出 e 的值

GESP二级练习&#xff0c;循环语句嵌套&#xff0c;难度★✮☆☆☆。 题目题解详见&#xff1a;https://www.coderli.com/gesp-2-luogu-b2079/ https://www.coderli.com/gesp-2-luogu-b2079/https://www.coderli.com/gesp-2-luogu-b2079/

鼠标自动移动防止锁屏的办公神器 —— 定时执行专家

目录 ◆ 如何设置 ◇ 方法1&#xff1a;使用【执行Nircmd命令】任务 ◇ 方法2&#xff1a;使用【模拟键盘输入】任务 ◆ 定时执行专家介绍 ◆ 定时执行专家最新版下载 ◆ 如何设置 ◇ 方法1&#xff1a;使用【执行Nircmd命令】任务 1、点击工具栏第一个图标【新建任务】&…

2025新年源码免费送

2025很开门很开门的源码免费传递。不需要馒头就能获取4套大开门源码。 听泉偷宝&#xff0c;又进来偷我源码啦&#x1f44a;&#x1f44a;&#x1f44a;。欢迎偷源码 &#x1f525;&#x1f525;&#x1f525; 获取免费源码以及更多源码&#xff0c;可以私信联系我 我们常常…

微信小程序实现登录注册

文章目录 1. 官方文档教程2. 注册实现3. 登录实现4. 关于作者其它项目视频教程介绍 1. 官方文档教程 https://developers.weixin.qq.com/miniprogram/dev/framework/路由跳转的几种方式&#xff1a; https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.switchTab…

1. Doris分布式环境搭建

一. 环境准备 本次测试集群采用3台机器hadoop1、hadoop2、hadoop3, Frontend和Backend部署在同一台机器上&#xff0c;Frontend部署3台组成高可用&#xff0c;Backend部署3个节点&#xff0c;组成3副本存储。 主机IP操作系统FrontendBackendhadoop1192.168.47.128Centos7Foll…

docker-compose安装canal并利用rabbitmq同步多个mysql数据

必看&#xff1a;本文默认已经安装好了docker-compose、rabbitmq、mysql并且mysql开启了binlog日志&#xff0c;不需要再安装&#xff1b; 流程图 如上图所示&#xff0c;左边是MQ模式流程图&#xff0c;右边则是TCP模式的流程图&#xff1b; 最终的目的是利用canal监听多个M…