每日一练:LeeCode-209、长度最小的子数组【滑动窗口+双指针】

每日一练:LeeCode-209、长度最小的子数组【滑动窗口+双指针】

  • 思路
    • 暴⼒解法
    • 滑动窗口

本文是力扣 每日一练:LeeCode-209、长度最小的子数组【滑动窗口+双指针】 学习与理解过程,本文仅做学习之用,对本题感兴趣的小伙伴可以出门左拐 LeeCode-209、长度最小的子数组

给定一个含有 n 个正整数的数组和一个正整数 target
找出该数组中满足 其总和大于等于 target 的长度最小的 连续子数组

[numsl, numsl+1, ..., numsr-1, numsr]

示例 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

提示:

  • 1 <= target <= 10^9
  • 1 <= nums.length <= 10^5
  • 1 <= nums[i] <= 10^5

思路

暴⼒解法

两个for循环

class Solution {public int minSubArrayLen(int target, int[] nums) {int result = Integer.MAX_VALUE;int subLength=0;    //子序列的长度int sum=0;  //和for(int i=0;i<nums.length;i++){sum=0;for(int j=i;j<nums.length;j++){sum+=nums[j];if(sum>=target){subLength=j-i+1;result = result<subLength?result:subLength;break;}}}return result==Integer.MAX_VALUE?0:result;}
}

在这里插入图片描述

时间复杂度:O(n^2)

空间复杂度:O(1)

滑动窗口

参考代码随想录

1、滑动窗口不断的调节⼦序列的起始位置和终⽌位置,从⽽得出我们要想的结果

  • 暴⼒解法中,是⼀个for循环滑动窗⼝的起始位置⼀个for循环为滑动窗⼝的终⽌位置,⽤两个for循环 完成

    ⼀个不断搜索区间的过程

  • 滑动窗⼝⽤⼀个for循环来完成这个操作,而且一个for只能用在滑动窗口终止位置 上,反之若用起止位置 上,还是会有两层for循环,那就没意思了

2、实现滑动窗⼝主要确定如下三点

  • 窗⼝内是什么

  • 如何移动窗⼝的起始位置

  • 如何移动窗⼝的结束位置

    窗⼝就是 满⾜其和 ≥ s 的⻓度最⼩的 连续 ⼦数组

    窗⼝的起始位置如何移动如果当前窗⼝的值⼤于s了,窗⼝就要向前移动了(也就是该缩⼩了),往右缩小

    窗⼝的结束位置如何移动窗⼝的结束位置就是遍历数组的指针,也就是for循环⾥的索引

    解题的关键在于 窗⼝的起始位置如何移动

在这里插入图片描述

滑动窗⼝的精妙之处在于根据当前⼦序列和⼤⼩的情况,不断调节⼦序列的起始位置。从⽽将O(n^2)暴⼒解法降为O(n)

class Solution {public int minSubArrayLen(int target, int[] nums) {int result = Integer.MAX_VALUE;int i=0;    //起始位置int subList;    //子序列的长度int sum=0;  //和for(int j=0;j<nums.length;j++){sum+=nums[j];// 注意这⾥使⽤while,每次更新 i(起始位置),并不断⽐较⼦序列是否符合条件while(sum>=target){ //两个精髓;大于等于都是移动滑动窗口起始位置的标志subList=j-i+1;result = result<subList? result: subList;sum-=nums[i++];}}return result==Integer.MAX_VALUE?0:result;}
}

时间复杂度:O(n)
空间复杂度:O(1)

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

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

相关文章

【论文笔记】Language Models are Few-Shot Learners

Language Models are Few-Shot Learners 本部分是 GPT-3 技术报告的第一部分&#xff1a;论文正文、部分附录。 后续还有第二部分&#xff1a;GPT-3 的广泛影响、剩下的附录。 以及第三部分&#xff08;自己感兴趣的&#xff09;&#xff1a;GPT-3 的数据集重叠性研究。 回顾…

React改变数据【案例】

State传统方式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>React Demo</title> <!--…

高效备考2025年AMC8数学竞赛:2000-2024年600道AMC8真题解析

我们继续来随机看五道AMC8的真题和解析&#xff0c;根据实践经验&#xff0c;对于想了解或者加AMC8美国数学竞赛的孩子来说&#xff0c;吃透AMC8历年真题是备考最科学、最有效的方法之一。 即使不参加AMC8竞赛&#xff0c;吃透了历年真题600道和背后的知识体系&#xff0c;那么…

PyQt5开发基础知识【一】

零.前言&#xff1a; 作者写这篇博客的目的主要在于巩固PyQt5的基础知识&#xff0c;例如PyQt5的几个核心模块&#xff0c;分别有什么功能&#xff0c;PyQt5的所有控件的使用方法等。 一.PyQt5的常见模块 1.1QtCore&#xff1a; 该模块包含了非GUI的功能设计。 这个模块被…

报错Importing ArkTS files to JS and TS files is not allowed. <etsLint>

ts文件并不支持导入ets文件&#xff0c;为了方便开发应用卡片&#xff0c;entryformAbility创建的时候默认是ts文件&#xff0c;这里只需要把ts文件改成ets便可以轻松的导入所需要的ets即可 我创建了一个鸿蒙开发的交流群&#xff0c;喜欢的鸿蒙朋友可以扫码或者写群号&#xf…

grafana table合并查询

注&#xff1a;本文基于Grafana v9.2.8编写 1 问题 默认情况下table展示的是一个查询返回的多个field&#xff0c;但是我想要的数据在不同的metric上&#xff0c;比如我需要显示某个pod的读写IO&#xff0c;但是读和写这两个指标存在于两个不同的metirc&#xff0c;需要分别查…

sentinel prometheus指标收集及资源规则正则表达式实现

sentinel 支持 prometheus 收集指标 实现原理 在 sentinel-extension 模块下&#xff0c;新增 sentinel-prometheus-metric-exporter 模块。依赖Prometheus 提供的 simpleclient 和 simpleclient_httpserver 来实现 exporter。 依赖 simpleclient 主要是为了实现自定义Collect…

网络编程套接字(3)——Java数据报套接字(UDP协议)

目录 一、Java数据报套接字通信模型 二、UDP数据报套接字编程 1、DatagramSocket &#xff08;1&#xff09;DatagramSocket构造方法 &#xff08;2&#xff09;DatagramSocket方法 2、DatagramPacket &#xff08;1&#xff09;DatagramPacket构造方法 &#xff08;2&…

高吞吐SFTP连接池设计方案

背景 在现代的数据驱动环境中&#xff0c;安全文件传输协议&#xff08;SFTP&#xff09;扮演着至关重要的角色&#xff0c;它提供了一种安全、可靠的文件传输方式。我们目前项目是一个大型数据集成平台&#xff0c;跟上下游有很多文件对接是通过SFTP协议&#xff0c;当需要处…

考研数学——高数:重积分

直角坐标系下二重积分 助记1&#xff1a; 因为一重积分求出的是二维平面的面积&#xff0c;类比得到二重积分得到的是三维的体积 而用之前求旋转体体积的思路&#xff1a;已知截面面积可求得体积。来表示二重积分 在控制一个变量不变&#xff08;x / y&#xff09;时&#x…

基于人工智能自动问答客服系统

在计算机及网络技术的飞速发展的今天&#xff0c;学校教育单位词语管理信息化、网络化是必然的趋势。然而我们利用计算机和网络技术来开发关于聊天自动控制管理系统是必不可少的&#xff0c;使用这样的技术有利于实现场景词语自动执行&#xff0c;减轻管理员的工作负荷&#xf…

【Android 内存优化】KOOM 快手开源框架线上内存监控方案-源码剖析

文章目录 前言OOMMonitorInitTask.INSTANCE.initOOMMonitor.INSTANCE.startLoopsuper.startLoopcall() LoopState.Terminate dumpAndAnalysisdumpstartAnalysisService回到startLoop方法总结 前言 这篇文章主要剖析KOOM的Java层源码设计逻辑。 使用篇请看上一篇: 【Android …