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

力扣209-长度最小的子数组-滑动窗口思想

题目

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

思路

用一个for循环来完成两个for循环的工作,滑动窗口思想

Q1:一个for循环中的j应该指向滑动窗口的末端还是滑动窗口的开始位置?

如果指向开始位置,那么找到那个末端就很难,需要他从开端位置全部遍历寻找,如果是末端的话,末端先移动,然后前面的指针在移动就可,所以应该是后端

Q2:循环中应该是for循环还是while循环

如果数组是1111 100,target是100,遍历到最后,sum=104然后前面指针开始缩小范围,缩小一个变成103,继续缩小...所以需要一直进行,if只进行一次,所以需要用while。

代码

class Solution {public int minSubArrayLen(int target, int[] nums) {int result=Integer.MAX_VALUE;//把他设置成最大值,也就是integer类型的最大值int sum=0;int i=0;for(int j=0;j<nums.length;j++){//这是滑动窗口的末端sum+=nums[j];while(sum>=target){//如果sum>=target,那么就可以缩小前面的指针,找到最小的子数组result=Math.min(result,j-i+1);//这些子数组的集合中找到最小的sum-=nums[i];i++;//移动前面指针}}return result==Integer.MAX_VALUE ?0:result;}
}

http://www.lryc.cn/news/466989.html

相关文章:

  • Xilinx 7系列FPGA PCI Express IP核简介
  • 红包雨html
  • js 基础补充3
  • Invalid bean definition with name ‘employeeMapper‘ defined in file
  • 悦享驾驶,乐在旅途,首选江铃集团新能源易至EV3青春版
  • 测试WIFI和以太网的TCP带宽、UDP带宽和丢包率、延时
  • redis 第155节答疑 源码分析Hash类型ziplist结构和zlentry实体解析
  • IDE使用技巧与插件推荐
  • 1020接口测试面试题随记
  • Zotero7最新(2024)翻译问题——配置 百度API翻译
  • python程序设计员—练习笔记
  • 1.DBeaver连接hive数据库
  • CODESYS随机动态图案验证码制作详细案例(三)
  • NodeJS 使用百度翻译API
  • 摩熵数科数据产品阵容BCPM
  • ros2 .idl文件生成C、C++代码
  • scrapy的xpath在控制台可以匹配,但是到了代码无法匹配(无法匹配tbody标签)
  • OpenCL内存模型
  • Commvault Cloud如何改变网络弹性游戏规则?
  • echarts环形饼图自定义边框、标题及图例
  • Android SELinux——上下文Context源码(十)
  • 责任链模式下,解决开闭原则问题实践
  • 对Android的Binder机制的了解
  • 收藏文章_VMware17Pro虚拟机安装教程(超详细)
  • 友思特分享 | 车载同步技术创新:多相机系统如何实现精准数据采集与实时处理?
  • grafana failed to load dashboard from file= ... json error=EOF
  • 【前端学习】AntV G6-09 复杂的自定义边、边动画
  • 极狐GitLab 发布安全补丁版本 17.4.2, 17.3.5, 17.2.9
  • MATLAB智能算法 - Immunity Algorithm免疫算法
  • 学习eNSP对提升就业竞争力有多大帮助?