3 滑动窗口

news2024/11/23 13:31:26

滑动窗口是一种常用的数据结构和算法思想,广泛应用于处理数组或序列中的连续片段问题。它的核心特点是窗口的大小可以动态调整,但总保持一个固定大小,通过在序列上“滑动”来检查不同的子序列。以下是滑动窗口的一些典型应用场景:

  1. 最大/最小值查找:在一系列数据中,寻找连续子序列的最大值或最小值,如股票价格最高点、最低点等。

  2. 子数组问题

    • 和的最值:如找到一个大小为k的子数组,使其和最大或最小。
    • 平均值最值:寻找具有最大或最小平均值的连续子数组。
    • 子数组问题计数:统计满足特定条件(如和大于某值)的子数组数量。
  3. 字符串处理

    • 字符计数:如判断一个字符串中是否存在长度为k的子串包含所有唯一字符。
    • 无重复字符的最长子串长度:经典的滑动窗口应用,如LeetCode上的问题"Longest Substring Without Repeating Characters"。
    • 字符串匹配问题:如寻找所有长度为k且匹配特定模式的子串。

滑动窗口的优势在于它可以在O(N)的时间复杂度内解决很多问题,其中N是序列的长度,通过一次遍历就能完成大部分计算,非常适合处理大规模数据流或高效遍历数组的需求。

1 无重复字符串的最长子串

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

示例 1:

输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:

输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:

输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

思想:最长 无重复,什么是个无冲出,当然要有对比,先设定一个容器暂时用来存储当前最长无重复的子串,然后往右滑动,

1 没有重复,扩容器;

2 有重复,容积缩;

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        # 固定一个容器 set
        container = []
        length = 0
        for i in s:
            if i not in container:
                # 扩展容器
                container.append(i)
                length = max(length, len(container))
            else:
                # 容器缩进,并把当前的元素加入
                index = container.index(i)
                container = container[index+1:]
                container.append(i)
        return length         

 438. 找到字符串中所有字母异位词

给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。

异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。

示例 1:

输入: s = "cbaebabacd", p = "abc"
输出: [0,6]
解释:
起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。
起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。

 示例 2:

输入: s = "abab", p = "ab"
输出: [0,1,2]
解释:
起始索引等于 0 的子串是 "ab", 它是 "ab" 的异位词。
起始索引等于 1 的子串是 "ba", 它是 "ab" 的异位词。
起始索引等于 2 的子串是 "ab", 它是 "ab" 的异位词。

使用列表: 

1 判断两个序列是否是异位词;
2 滑动窗口;走一步判断一步;
class Solution:
    def findAnagrams(self, s: str, p: str) -> List[int]:
        # 
        len_p = len(p)
        len_s = len(s)
        if len_p>len_s:
            return []
        p = sorted(p)
        results = []
        for i in range(len_s-len_p+1):
            if s[i] not in p:
                continue
            if sorted(s[i:i+len_p])==p:
                results.append(i)
        return results

使用字典 :

class Solution:
    def findAnagrams(self, s: str, p: str) -> List[int]:
        # 
        len_p = len(p)
        len_s = len(s)
        if len_p>len_s:
            return []

        # 对比的字典
        p_d = {}
        for i in p:
            if i in p_d:
                p_d[i]+=1
            else:
                p_d[i] = 1
    
        # 滑动窗口的字典  
        t_dict = {}
        for i in s[:len_p]:
            if i in t_dict:
                t_dict[i] += 1
            else:
                t_dict[i] =1
        results = []
        for i in range(len_p,len_s):
            if t_dict==p_d:
                results.append(i-len_p)

            top = s[i-len_p]

            # 滑动1个
            # 删除元素
            if t_dict[top]>1:
                t_dict[top]-=1
            else:
                t_dict.pop(top)
            # 添加元素
            if s[i] in t_dict:
                t_dict[s[i]]+=1
            else:
                t_dict[s[i]]=1

        if t_dict==p_d:
            results.append(len_s-len_p)
        return results

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

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

相关文章

帝国cms未审核文章可视化预览效果

有时候为了让编辑更加清楚的看到别人审核之后的效果,同时文章有需要下一级审核才能在前端展示出来,今天就来展示一个未审核文章预览审核后的效果 这次给某出版社开发的时候,他们需要实现编辑能够预览自己发布之后的审核效果,所以就…

想学gis开发,java和c++那个比较好?

ava与C的应用场景不同,究竟选择谁,应该由开发者的兴趣方向来决定。 你选择Java,意味着以后的业务方向就是偏后台服务开发,如果你非得说我用java也可以写界面,对不起,别人不会。 刚好我有一些资料&#xf…

从源码到上线:直播带货系统与短视频商城APP开发全流程

很多人问小编,一个完整的直播带货系统和短视频商城APP是如何从源码开发到最终上线的呢?今天,笔者将详细介绍这一全过程。 一、需求分析与规划 1.市场调研与需求分析:首先需要进行市场调研,了解当前市场的需求和竞争情…

移动端 UI 风格,书写华丽篇章

移动端 UI 风格,书写华丽篇章

电阻代码的谐音助记口诀

整理电子信息的课设,发现当时的笔记,记录一下,时间过得真快啊。 01234黑棕红橙黄 56789绿蓝紫灰白 银色和金色代表误差, 银色百分之十 金色百分之五 可以这么理解,运动会奖牌,金牌比银牌等级高&#xff…

简过网:考公务员报班和不报班的区别大吗?

备考公务员,究竟是报班还是不报班呢?一篇文章让你看看两者之间的区别! 报不报班,其实这是很多考生都会纠结的地方,其实小编还是建议报个班的,这不仅仅是因为我是做这个行业的,更是因为这么长时…

用Microsoft.Extensions.Hosting 管理WPF项目.

首先引入必要的包: <ItemGroup><PackageReference Include"CommunityToolkit.Mvvm" Version"8.2.2" /><PackageReference Include"Microsoft.Extensions.Hosting" Version"8.0.0" /><PackageReference Include&q…

工商银行:低息差下的挣扎

时隔四年&#xff0c;市值再度超越贵州茅台成为A股“股王”。 今天要说的就是“宇宙行”——中国工商银行 虽然茅台的信仰开始崩塌&#xff0c;但各大银行股巨头们今年也不好过。2024年一季度六大行业绩集体受挫&#xff0c;息差普遍收窄超过20个基点。其中&#xff0c;包括工…

grpc学习golang版(六、服务器流式传输)

系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 第三章 proto文件数据类型 第四章 多服务示例 第五章 多proto文件示例 第六章 服务器流式传输 文章目录 一、前言二、定义proto文件三、拷贝任意文件进项目四、编写server服务端五、编写client客户端六、测试六、示…

LLM RAG with Agent

题意&#xff1a;基于代理的LLM检索增强生成 问题背景&#xff1a; I was trying the application code in the link. 我正在尝试链接中的应用程序代码。 I am using the following Llang Chain version 我正在使用以下Llang Chain版本 langchain 0.0.327 langchain-commun…

UE学习笔记--UE项目,IDE提示项目被卸载的解决方案

前言 我用的 IDE 是 Rider。 我不小心把 Intertmediate 文件夹给删掉了。 然后进入 Rider&#xff0c;报了一些错&#xff0c;然后编译也有问题。启动不了 UE。 解决办法 右键你的 uproject&#xff0c;点击 Generate visual studio project files。 让它重新生成对应的文件…

Windows11+CUDA12.0+RTX4090如何配置安装Tensorflow2-GPU环境?

1 引言 电脑配置 Windows 11 cuda 12.0 RTX4090 由于tensorflow2官网已经不支持cuda11以上的版本了&#xff0c;配置cuda和tensorflow可以通过以下步骤配置实现。 2 步骤 &#xff08;1&#xff09;创建conda环境并安装cuda和cudnn&#xff0c;以及安装tensorflow2.10 con…

ManageEngine连续荣登Gartner 2024年安全信息和事件管理魔力象限

我们很高兴地宣布&#xff0c;ManageEngine再次在Gartner的安全信息和事件管理&#xff08;SIEM&#xff09;魔力象限中榜上有名&#xff0c;这是我们连续第七年获得这一认可。 Gartner ManageEngine Log360是一款全面的SIEM解决方案&#xff0c;旨在帮助组织有效处理日志数据…

电机驱动知识点总结

文章目录 一、直流电机入门基础知识1.直流电机原理2.减速器3.电机实物接线图解 二、TB6612 模块介绍1.D103A 模块说明2.D153B 模块说明3.D24A 模块说明 三、原理图说明1.TB6612 芯片原理图介绍与控制说明2.D103A 模块原理图介绍3.D153B 原理图介 四、电机驱动问题排查和测试方法…

如何加密电脑文件夹?安全可靠的文件夹加密工具分享

如何加密电脑文件夹呢&#xff1f;很多办公的小伙伴都有这样的疑问。想要保护自己的电脑文件夹数据的安全&#xff0c;但又不知道如何下手。这时候就需要借助电脑文件加密工具进行文件安全防护了。 本文将详细讲解电脑文件夹加密的方法&#xff0c;推荐几款款安全可靠的文件夹加…

001 ElasticSearch7.x 、IK分词器、Kibana 环境搭建、安装

ElasticSearch 7.x 文章目录 ElasticSearch 7.x1.windows环境安装1.ik分词器安装2.es启动3.Kibana启动 2.Linux环境安装3.分词器1.分词测试2.ES中默认分词器3.IK分词器4.自定义分词器 1.windows环境安装 es下载地址&#xff1a; https://www.elastic.co/cn/downloads/past-rel…

云通SIPX,您的码号资源智能调度专家!

在数字化转型的浪潮中&#xff0c;号码资源作为企业与客户沟通的重要桥梁&#xff0c;其管理效率直接关系到企业运营的成败。随着运营商对号码资源管理的规范化和精细化&#xff0c;企业对高效、智能的号码资源管理需求日益增长&#xff0c;以实现对外呼叫的降本增效。 一、什么…

SyntaxError: Unexpected token ‘??=‘

前端运行报错&#xff1a; globalThis.GLOBAL_NX_VERSION ?? GLOBAL_NX_VERSION;^^^SyntaxError: Unexpected token ??解决&#xff1a; 检查node版本 node -v当前使用的是14.21.3的版本&#xff0c;切换到一个16.0.0以上的版本即可&#xff0c;推荐使用nvm管理node版本 …

前端性能优化-实测

PageSpeed Insights 性能测试 今天测试网站性能的时候发现一个问题&#xff0c;一个h2标签内容为什么会占据这么长的渲染时间&#xff0c;甚至有阶段测到占据了7000多毫秒&#xff0c;使用了很多方法都不能解决&#xff0c;包括了修改标签&#xff0c;样式大小等&#xff0c;当…

使用Retrofit2+OkHttp监听上传或者下载进度会执行两次的问题

使用Retrofit2OkHttp监听上传或者下载进度RequestBody#writeTo/ResponseBody#source 会执行两次的问题 example&#xff1a; 问题原因&#xff1a; 使用了HttpLoggingInterceptor拦截器&#xff0c;并且日志等级为HttpLoggingInterceptor.Level.BODY 问题解决&#xff1a;