滑动窗口算法笔记(C++)

devtools/2025/2/14 3:23:03/

滑动窗口算法是一种基于双指针技巧的高效算法, 常用于解决数组或字符串上的一些特定问题.

算法讲解

基本概念

滑动窗口算法可以想象成在一个数组或字符串上有一个固定大小或者可变大小的窗口, 该窗口在数组或字符串上从左到右滑动. 在滑动的过程中, 根据具体问题的要求, 对窗口内的元素进行计算和操作. 窗口的大小可以根据问题的不同而变化, 有时是固定的, 有时是动态调整的.

算法实现步骤

  • 初始化: 定义两个指针(例如leftright), 表示窗口的左右边界, 初始时通常都指向数组或字符串的起始位置. 同时, 根据问题的需要, 初始化一些变量来记录窗口内的状态, 如窗口内元素的和, 不同元素的个数等.
  • 移动右指针: 将右指针向右移动一位, 扩大窗口的范围, 把新元素纳入窗口内. 然后根据问题的要求, 更新窗口内的状态变量.
  • 判断和调整: 检查当前窗口是否满足问题的条件. 如果不满足条件, 就需要移动左指针, 缩小窗口的范围, 同时更新状态变量, 直到窗口满足条件为止.
  • 重复步骤: 不断重复步骤 2 和步骤 3, 直到右指针到达数组或字符串的末尾. 在这个过程中, 根据问题的具体要求, 记录和更新所需的结果.

例题: 无重复字符的最长子串

这是 Leetcode 上面的一道题目: 3. 无重复字符的最长子串.

给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。

例如:

  • s = "abcabcbb", 最长子串长度为 3
  • s = "bbbbb", 最长子串为 1
  • s = "pwwkew", 最长子串长度为 3
解题思路

使用一个滑动窗口, 左边界为l, 右边届为r, 滑动窗口为[l, r](需要注意是闭区间, 即包含右端点r处的元素). 窗口内的元素是没有重复的, 这是本程序的循环不变量.

  1. 初始值为l=0, r=0. 此时包含一个元素, 窗口状态满足循环不变量.
  2. 首先对

http://www.ppmy.cn/devtools/158660.html

相关文章

深度学习-与OCR结合

光学字符识别(OCR)旨在将图像中的文本信息转换为计算机可编辑的文本,深度学习技术能够显著提升OCR的准确性和泛化能力。下面为你介绍如何将深度学习与OCR结合,同时给出使用Python和相关库实现的代码示例。 整体思路 结合深度学习…

Qt:Qt窗口

目录 概念 菜单栏 创建菜单栏 在菜单栏中添加菜单 创建菜单项 在菜单项之间添加分割线 工具栏 创建工具栏 设置停靠位置 设置浮动属性 设置移动属性 状态栏 状态栏的创建 显示实时消息 显示永久消息 浮动窗口 浮动窗口的创建 设置停靠位置 对话框 对话框介…

【自学笔记】AIGC基础知识点总览-持续更新

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 AIGC基础知识点总览一、AIGC概述二、AIGC的核心要素三、AIGC的关键技术1. 深度学习算法2. 自然语言处理(NLP)3. 计算机视觉(CV&a…

linux 查看正在运行的进程 停止进程

1、查看正在运行的进程 使用 ps 命令:可以用来显示当前终端会话中运行的进程。 ps若要查看系统上所有用户的所有进程,可以使用: ps aux使用 top 命令:提供一个动态的、实时的进程视图。 top在 top 中,你可以看到CPU、内…

DeepSeek-R1:通过强化学习提升大型语言模型推理能力的探索

DeepSeek-R1:通过强化学习提升大型语言模型推理能力的探索 在人工智能领域,大型语言模型(LLMs)的发展日新月异,其在自然语言处理和生成任务中的表现逐渐接近人类水平。然而,如何进一步提升这些模型的推理能…

Jetpack之ViewBinding和DataBinding的区别

DataBinding与ViewBinding推出的时间 DataBinding推出的时间比较早‌,ViewBinding是后来推出的。 DataBinding在2015年7月发布的Android Studio v1.3.0版本上引入,并在2016年4月Android Studio v2.0.0版本上正式支持‌。 ViewBinding则是在2019年Andr…

flutter本地推送 flutter_local_notifications的使用记录

flutter_local_notifications 效果 安卓配置(AndroidManifest.xml) <uses-permission android:name"com.android.alarm.permission.SET_ALARM"/> <uses-permission android:name"android.permission.SCHEDULE_EXACT_ALARM" /> <us…

android launcher拖动图标释放错位

由于为了设备流畅把所有动画效果设置为0.5&#xff0c;不设置为0是因为锁屏在开机时会有闪黑屏的现象。在此背景下&#xff0c;测试发现在拖动桌面图标时&#xff0c;在图标动画过程中错位时释放图标&#xff0c;则图标会留在错位的位置&#xff0c;不会自动对齐。 原因就是动…