当前位置: 首页 > news >正文

力扣-长度最小的子数组

1.题目描述

2.题目链接

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

3.题目分析

这道题目我们使用的也是双指针。我们可以定义两个指针都指向数组第一个元素,然后使用right指针遍历原数组计算left指针到right指针之间的所有元素的和是否大于等于target

如果大于,就停止right的遍历,存储此时的最小数组长度length,再移动left指针直到left指针到right指针之间的所有元素的和小于target时停止left的移动,继续right指针的移动。

重复此过程,直到right指针遍历完数组,在此期间,不断地取存储的length和新的right-left+1的最小值,最后得到的就是长度最小的子数组了。

我们可以发现,这道题和我们前面做过的双指针题目并不是很相似,因为left和right指针同向移动并且不会回退,也就是说两个指针一直在向同一个方向移动。这种移动就像是一个窗口在数组中滑动,所以我们称呼这种算法为滑动窗口。 ;

滑动窗口的步骤主要分为:

其中进窗口就是right遍历数组;判断就是left和right之间的元素之和是否大于target;出窗口就是left移动。

4.代码细节

1)我们可以定义length的初始值为Integer.MAX_VALUE

   int left=0,right=0,sum=0,length=Integer.MAX_VALUE;

 这样,无论我们求得的length是多少,我们通过取最小值的方式都可以更新到length,如果我们设置length的初始值为0的话,无论我们求得的length是多少,最后取最小值得到的length都是0。

  length=Math.min(length,right-left+1);

2) return length!=Integer.MAX_VALUE?length:0;

题目要求我们在没有找到符合条件的子数组的时候返回0,所以我们可以通过三位运算符的return来进行返回。

 return length!=Integer.MAX_VALUE?length:0;

相关文章:

  • Linux操作系统:fork+exec进程创建
  • 如果教材这样讲--碳膜电阻、金属氧化膜电阻、金属膜电阻、保险丝电阻、绕线电阻的区别和用途
  • Docker 与微服务架构:从单体应用到容器化微服务的迁移实践
  • 微软全新开源的Agentic Web网络项目:NLWeb,到底是什么 ?
  • 2024-2025年AI领域重大事件深度解析:技术革命、产业重构与未来挑战
  • 机器学习与深度学习算法:从决策树到 GAN 的原理与 PyTorch 实现
  • 升级node@22后运行npm install报错 distutils not found
  • leetcode 83和84 Remove Duplicates from Sorted List 和leetcode 1836
  • 微服务的应用案例
  • JMeter-Websocket接口自动化
  • C++23中std::span和std::basic_string_view可平凡复制提案解析
  • SpringBoot的前世今生
  • 学习STC51单片机11(芯片为STC89C52RC)
  • 使用VLOOKUP查询两个表格,使用数字格式进行查询,如果返回NA错误,则使用文本格式进行查询
  • 实战:Dify智能体+Java=自动化运营工具!
  • 1 研发规划
  • java基础(方法)
  • Spring Boot——自动配置
  • PL/Python数据库: PostgreSQL Python扩展
  • 2025最新版Visual Studio Code for Mac安装使用指南
  • 网站添加谷歌地图/恶意点击软件哪几种
  • 微信网站收钱吗/网络营销专业的就业方向
  • 彩票网站 在哪里做/广告推广渠道有哪些
  • 如何运营自己的网店/seo店铺描述例子
  • 怎么做网站的图片跳转/seo优化是怎么回事呢
  • 抚顺网站网站建设/网络营销的工作内容包括哪些