算法 | 滑动窗口算法笔记

news2024/9/27 19:20:46

滑动窗口:核心思想

核心思想:维护一个窗口(又叫做子区间),通过调整窗口的起始位置(start)和终止位置(end),来寻找符合特定条件的子区间。

  • 滑动窗口算法常常和双指针相结合使用
  • 常常用于处理数组或字符串中的子区间问题
  • 优势在于它能够在线性时间复杂度 O ( N ) O(N) O(N)内解决一些需要求解子区间的问题,而无需使用暴力遍历的方式

滑动窗口问题解决步骤:

  1. 初始化窗口的左指针(left)和右指针(right
    • 通常为数组或字符串的起始位置, 令left, right = 0, 0
  2. 移动窗口的右指针(right),扩大窗口,直到满足某个条件为止
    • 一般当右指针到达数组或字符串右边界时,停止扩大窗口
  3. 当窗口满足条件时,如果需要找到最小长度或最大长度,可以更新结果。
  4. 移动窗口的左指针(left),缩小窗口,直到不再满足条件为止。
  5. 重复步骤 2 和 4,直到遍历完整个数组或字符串。

Leetcode:长度最小的子数组

题目描述

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

题目链接:https://leetcode.cn/leetbook/read/all-about-array/x9gogt/

题目分析与实现

数据结构:数组

实现方法:

  • 暴力破解法

  • 滑动窗口

  • 前缀和 + 二分查找

1	# Use Python to solve
2	def minSubArrayLen(target, nums):
3	    """
4	    使用滑动窗口算法解决:找到数组中和大于等于给定目标数的最短连续子数组的长度问题
5	
6	    参数:
7	        target(int):目标值
8	        nums(List[int]): 目标数组
9	
10	    返回值:
11	        int
12	    """
13	    n = len (nums)
14	    # 初始化左右指针
15	    left = 0
16	    right = 0
17	    # 初始化最小长度
18	    min_len = n + 1
19	
20	    cal_sum = 0
21	
22	    # 将 right 指针向右移动,并累计子数组的和 cal_sum。
23	    while right < n:
24	        cal_sum += nums[right]
25	        # 调整子数组的范围
26	        while cal_sum >= target:
27	            min_len = min (min_len, right - left + 1)
28	            cal_sum -= nums[left]
29	            left += 1
30	        right += 1
31	    # 如果最后最小长度没变,说明该数组当中不存在满足目标值的最小子区间,直接返回0
32	    if min_len == n + 1:
33	        return 0
34	    else:
35	        return min_len

最后,推荐一个在线调试的网站,可以直接在网页查看程序每一步骤的调用结果,对于理解程序是如何运行比较有帮助:

  • pythontutor.com
    在这里插入图片描述

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

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

相关文章

包管理器 | 浅谈几个常用的包管理工具

目录 &#x1f5a5;️ 前言 ◼️ npm ◼️ cnpm ◼️ yarn ◼️ pnpm ◼️ Bower &#x1f5a5;️ 参考文献 &#x1f5a5;️ 参考资料 &#x1f5a5;️ 前言 如果你是前端开发者&#xff0c;或多或少都会接触到一些包管理工具&#xff0c;包管理工具是用于持续自动化…

17.OpenCV中的GFTTDetector类

文章目录 GFTTDetector功能OpenCV中GFTTDetector类reference 欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f339;&#x1f339; 这是使用imgproc.hpp中的goodFeaturesToTrack函数封装的类&#xff0c;其使用和goodFeaturesToTrack函数基本相似。 GFTTDetec…

wps如何加载mathtype和Endnote

为了支持国产化软件&#xff0c;弃用office套装&#xff0c;现在改用wps办公软件&#xff0c;但是写作科技论文的时候还是会出现很多的不方便&#xff0c;比如文献引用、公式排版编号等等。尽管wps自带了公式编辑器&#xff0c;然鹅这可太不方便了&#xff0c;因此把几个技巧总…

由于找不到libmmd.dll,无法继续执行代码有什么好的解决办法修复?

其实要解决由于找不到libmmd.dll,无法继续执行代码这个问题还是比较简单的&#xff0c;因为这类问题不外乎就是丢失了dll文件&#xff0c;我们只要下载安装回来就可以了&#xff0c;但有朋友还是会好奇&#xff0c;libmmd.dll到底是什么文件&#xff0c;那我们就来详细说说吧&a…

paddlenlp安装教程

一、安装cuda和cuDNN 1、安装paddlepaddle之前&#xff0c;要确保电脑已经安装了对应版本的cuda和cuDNN &#xff08;1&#xff09;安装CUDA 进入官网选择合适版本下载&#xff1a; 按照步骤安装完成即可。安装完成后进行验证&#xff0c;打开cmd命令窗口&#xff0c;输入nv…

Floyd算法学习笔记

Floyd算法学习笔记 前言 同步于 c n b l o g s cnblogs cnblogs 发布 如有错误&#xff0c;欢迎各位 dalao 批评指出。 前置芝士: 1.邻接矩阵&#xff08;Floyd要用邻接矩阵存图&#xff09; 2.动态规划思想&#xff08;最好学过&#xff0c;没学过也没有太大影响&#…

无线视频传输方案|远距离无人机图传应用,+28dBm大功率wifi图传模块

针对无人机远程图片、视频传输需求&#xff0c;市面上就有无线模块研发厂家推出了基于大功率图传WiFi模块SKW77的无人机远程视频传输解决方案。在无人机和地面的中继器内加入串口WiFi模块&#xff0c;手机通过与无人机和地面的中继器内置的串口WiFi模块给无人机传递控制信号&am…

深度理解 JAVA 动态代理

本文篇幅比较长&#xff0c;在确定您是否需要仔细阅读本文前&#xff0c;可以先思考一下下面几个问题&#xff1a; 动态代理是什么&#xff1f;如何实现动态代理&#xff1f;所有类都能实现动态代理吗&#xff1f;非目标方法是否会被代理&#xff1f;为什么 JDK 实现动态代理必…

平安养老险广东分公司积极开展“7·8全国保险公众宣传日”系列活动

2023年是全面贯彻落实党的二十大精神的开局之年&#xff0c;是实施“十四五”规划承上启下的关键之年。在国家金融监督管理总局指导、中国保险行业协会组织下&#xff0c;平安养老保险股份有限公司广东分公司&#xff08;以下简称“平安养老险广东分公司”&#xff09;以“78全…

ETHERNET/IP转MODBUS-RTU协议网关

远创智控YC-EIP-RTU是自主研发的一款ETHERNET/IP从站功能的通讯网关。该产品主要功能是将各种MODBUS-RTU设备接入到ETHERNET/IP网络中。 远创智控YC-EIP-RTU连接到ETHERNET/IP总线中做为从站使用&#xff0c;连接到MODBUS-RTU总线中做为主站或从站使用。 2.ETHERNET/IP转MODBU…

IDEA中配置Java反编译工具javap -c

IDEA中配置Java反编译工具javap -c 一、前置条件二、新建外部工具三、使用方式 欢迎访问我的个人博客&#xff1a;https://wk-blog.vip 一、前置条件 确保 IDEA 已经开启了编译 javac 。默认 IDEA 是开启的。 二、新建外部工具 首先进入 Settings ---> Tools ---> Ext…

自动化测试报告样式HTMLTestRunner、BeautifulReport、HTMLReport、Allure你喜欢哪个?

自动化测试报告样式HTMLTestRunner、BeautifulReport、HTMLReport、Allure你喜欢哪个&#xff1f; 1 框架设计(准备工作)1.1 简易框架图1.2 common/reportOut.py1.3 report1.4 testcase/test_baidu.py1.5 mian.py 2 HTMLTestRunner2.1 下载使用2.2 reportOut.py设计2.3 报告样式…

十一、框架与大数据模型

frameset标签 1、frameset标签 这种结构&#xff0c;基本上被淘汰 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <frameset cols"25%,75%">&…

统计每列中不同值出现的次数.apply(pd.value_counts)

在Python 的pandas.DataFrame中有一种操作&#xff0c;它可以大大减轻我们的工作量&#xff0c;方便我们更快地进行数据分析&#xff0c;加快处理工作的效率。这就是 .apply(pd.value_counts) pandas 的强大&#xff0c;越使用&#xff0c;也就越爱了。现在就来夸夸它的作用啦…

统计学习导论(ISLR) 第八章树模型课后习题

统计学习导论(ISLR) 第八章树模型课后习题 🌸个人主页:JOJO数据科学📝个人介绍:统计学top3高校统计学硕士在读💌如果文章对你有帮助,欢迎✌关注、👍点赞、✌收藏、👍订阅专栏✨本文收录于【R语言数据科学】本系列主要介绍R语言在数据科学领域的应用包括: R语言…

二叉树 — 返回最大的二叉搜索子树大小

题目&#xff1a; 给定一棵二叉树的head节点&#xff0c;返回这颗二叉树中最大的二叉搜索子树的大小。 一颗二叉树来讲&#xff0c;可能整棵树不是搜索二叉树&#xff0c;但子树是一颗搜索二叉树。如下图所示&#xff0c;这时要返回这颗子搜索二叉树的最大节点个数。下图中&…

【node报错】cannot be loaded because running scripts is disabled on this system.

了解意思&#xff1a; cannot be loaded because running scripts is disabled on this system. 因为在该系统上禁用了运行脚本&#xff1b; 这个错误是由于你的系统执行策略&#xff08;Execution Policies&#xff09;禁止运行脚本导致的。Windows 系统默认情况下禁止运行…

ChatGPT前身GPT的论文-译文

写在前面 论文 Improving Language Understanding by Generative Pre-Training 地址 https://www.cs.ubc.ca/~amuham01/LING530/papers/radford2018improving.pdf ChatGPT火了&#xff0c;改论文作为ChatGPT的前身&#xff0c;可以从这里看到ChatGPT的原始影子。 摘要 自然语言…

制造业怎么应用大数据?_光点科技

随着信息技术的迅猛发展&#xff0c;大数据正逐渐成为各行各业的重要资源和工具。在制造业中&#xff0c;大数据的应用也逐渐得到了广泛关注。 制造业如何应用大数据&#xff1f; 首先&#xff0c;数据采集是制造业应用大数据的重要一环。制造业的生产过程中涉及到大量的数据&a…

二叉树OJ题:LeetCode--101.对称二叉树

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下LeetCode中第144道二叉树OJ题&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; 数据结构与算法专栏&#xff1a;数据结构与算法 个 人…