[滑动窗口] (一) LeetCode 209. 长度最小的子数组 和 LCR 016.无重复字符的最长子串

news2024/11/27 9:51:19

[滑动窗口] (一) LeetCode 209. 长度最小的子数组 和 LCR 016.无重复字符的最长子串

文章目录

      • [滑动窗口] (一) LeetCode 209. 长度最小的子数组 和 LCR 016.无重复字符的最长子串
        • 什么是滑动窗口
        • 长度最小的子数组
          • 题目解析
          • 解题思路
          • 代码实现
          • 总结
        • 无重复字符的最长子串
          • 题目解析
          • 解题思路
          • 代码实现
          • 总结

什么是滑动窗口

滑动窗口并不是真的创建出一个数组,而是利用一个left“指针”和right“指针”,让它们在原数组之间的区间来模拟出一个类似窗口的"数组",一般由right向右移动扩大窗口大小,直到不满足要求后,再让left向右移动。

这就是模拟出一个滑动窗口。

长度最小的子数组

209. 长度最小的子数组

image-20231103153110188

题目解析

(1) 含有正整数的nums和一个正整数target

(2) 找出一个连续子数组的总和大于等于target

解题思路

通过题目解析,我们确定了这道题的解法。

解法:滑动窗口

构建一个left指针, 一个right指针。让他们之间的区间模拟,我们想要的小于target的一一个连续子数组。

由right来进窗口,left负责出窗口。在每次出窗口前更新结果。

示例1:

image-20231103155032444

看到这里,大家可以先去实现代码,再看下面的内容。


代码实现
class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int sum = 0, ret = INT_MAX;
        for(int left = 0, right = 0; right < nums.size(); right++)
        {
            //进窗口
            sum += nums[right];
            //判断
            while(sum >= target)
            {
                //更新结果
                ret = min(ret, right - left + 1);
                //出窗口
                sum -= nums[left++];
            }
        }
        return ret == INT_MAX ? 0 : ret;
    }
};

image-20231103155238475

总结

细节1:ret赋值为INT_MAX,方便最后两数取小。

细节2:返回时判断,ret是否为INT_MAX,否则返回0

无重复字符的最长子串

LCR 016. 无重复字符的最长子串

image-20231103155316305

题目解析

(1) 从字符串中找出一个子字符串

(2) 子字符串的要求:最长且不能有字母重复

解题思路

从题目分析得出,我们这道题可以使用滑动窗口+哈希的方法

解法:滑动窗口+哈希

定义一个left,right指针,right负责进窗口,left负责出窗口,哈希表进行判断子串是否重复。

当重复时,left不断出窗口直到hash[s[right]]不大于1。在每次不重复时更新结果。

示例1:

image-20231103162450797

看到这里,大家可以先去实现代码,再看下面的内容。


代码实现
class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        if(s.size() == 0) return 0;
        int ret = 0;
        int hash[128] = {0};
        for(int left = 0, right = 0; right < s.size(); right++)
        {
            //进窗口
            hash[s[right]]++;
            //判断
            while(hash[s[right]] > 1)
            {
                //出窗口
                hash[s[left++]]--;
            }
            //更新结果
            ret = max(ret, right - left + 1);
        }
        return ret;
    }
};

image-20231103162533694

总结

细节1:每次进入一个字符就需要更新一次结果。

细节2:字符串为空时,返回0。

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

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

相关文章

氮化镓功率放大器长期记忆效应的补偿

标题&#xff1a;Compensation of Long-Term Memory Effects on GaN HEMT-Based Power Amplifiers 来源&#xff1a;IEEE TRANSACTIONS ON MICROWAVE THEORY AND TECHNIQUES DPD&#xff1a;数字预失真&#xff08;Digital Pre-Distortion&#xff09;RF PA&#xff1a;射频功…

UI设计感专业商业代理服务公司宣传前端网站模板源码

专业商业代理服务公司宣传网站模板是一款适合提供商情分析、报告分析、IT咨询、管理、策略计划等商业代理服务公司宣传网站模板下载。提示&#xff1a;本模板调用到谷歌字体库&#xff0c;可能会出现页面打开比较缓慢。 演示下载 qnziyw点cn/wysc/qdmb/21764点html

CoDeSys系列-4、基于Ubuntu的codesys运行时扩展包搭建Profinet主从环境

CoDeSys系列-4、基于Ubuntu的codesys运行时扩展包搭建Profinet主从环境 文章目录 CoDeSys系列-4、基于Ubuntu的codesys运行时扩展包搭建Profinet主从环境一、前言二、资料收集三、Ubuntu18.04从安装到更换实时内核1、下载安装Ubuntu18.042、下载安装实时内核&#xff0c;解决编…

【Linux】 man命令使用

介绍 man命令是Linux下最核心的命令之一。而man命令也并不是英文单词“man”的意思&#xff0c;它是单词manual的缩写&#xff0c;即使用手册的意思。 man命令会列出一份完整的说明。 其内容包括命令语法、各选项的意义及相关命令 。更为强大的是&#xff0c;不仅可以查看Lin…

Redis创始人开源最小聊天服务器,仅200行代码,几天功夫已获2.8K Star!

中午时候&#xff0c;在技术交流群里聊起关于Redis创始人的一些趣事&#xff0c;比如离开Redis之后&#xff0c;去写科幻小说之类的。 因为好奇科幻小说&#xff0c;TJ君就去搜索了一下。结果一搜&#xff0c;发现Redis作者最近居然又搞了个新活儿&#xff01; 世界上最小的聊…

网安新旅程

网安新旅程 将近四个月没发博客了&#xff0c;今天交代一下最近发生的事情和规划。 TryHackMyOffsecBox QQ交流 君羊&#xff1a;751273347 近期的事情 6月开始我进入htb学院学习CPTS&#xff0c;7月左右我完成了95%左右的内容。7-8月份我基本都在做C#相关的开发&#xff0c…

Linux ----------------------- 文本处理工具

&#xff08;一&#xff09;绪论 awk、grep、sed和cut 是Linux 操作文本的四大利器&#xff0c;合称文本四大金刚&#xff0c;也是必须掌握的Linux 命令之一。这四个工具的功能各有侧重&#xff1a; awk&#xff1a;功能最强大&#xff0c;用于处理和格式化文本&#xff0c;可…

uniapp原生插件之安卓热敏打印机打印插件

插件介绍 安卓热敏打印机打印插件&#xff0c;自动授权&#xff0c;打印机连接监听&#xff0c;打印文本&#xff0c;条形码&#xff0c;二维码&#xff0c;切纸&#xff0c;打印机状态&#xff0c;打印结果查询等 插件地址 安卓热敏打印机打印插件 - DCloud 插件市场 超级…

信号完整性分析基础知识之有损传输线、上升时间衰减和材料特性(九):互连的带宽

如果我们从理想方波的频谱开始&#xff0c;优先衰减高频分量而不是低频分量&#xff0c;则传输信号的带宽&#xff08;重要的最高正弦波频率&#xff09;将会减小。我们让波传播的时间越长&#xff0c;高频分量的衰减就越大&#xff0c;带宽就越低。 带宽作为重要的最高正弦波频…

EASYX输出文字

在EASYX中绘制出字符串和字符 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <easyx.h> #include <iostream> #include <math.h> #include <stdlib.h> #include <conio.h> #include <time.h> #define PI 3.14、 //…

CoT: 思路链提示促进大语言模型的多步推理

CoT 总览摘要1 引言2 Chain-of-Thought Prompting3 算术推理 &#xff08;Arithmetic Reasoning&#xff09;3.1 实验设置3.2 结果3.3 消融实验3.4 CoT的鲁棒性 4 常识推理 &#xff08;Commonsense Reasoning&#xff09;5 符号推理 &#xff08;Symbolic Reasoning&#xff0…

SLAM从入门到精通(计算点到直线的距离)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 大家一开始看到这个题目的时候&#xff0c;也许比较吃惊。为什么会有这样的题目&#xff1f;但是做过slam的同学&#xff0c;应该就比较熟悉和了解…

Mysql库操作

一&#xff1a;库的操作 1&#xff1a;创建数据库 mysql> create database test1; Query OK, 1 row affected (0.00 sec)mysql> create database test2 charsetutf8;create database test2 character utf8;Query OK, 1 row affected (0.00 sec)mysql> create databa…

Linux学习笔记之二(环境变量)

Linux learning note 1、环境变量1.1、修好PATH环境变量 1、环境变量 环境变量(environment variables)即系统运行的一些环境参数。主要的环境变量有以下这些&#xff1a; PATH&#xff1a;决定了系统查找可执行文件的目录范围。HOME&#xff1a;指定当前用户的主目录路径。U…

【C++心愿便利店】No.11---C++之string语法指南

文章目录 前言一、 为什么学习string类二、标准库中的string类 前言 &#x1f467;个人主页&#xff1a;小沈YO. &#x1f61a;小编介绍&#xff1a;欢迎来到我的乱七八糟小星球&#x1f31d; &#x1f4cb;专栏&#xff1a;C 心愿便利店 &#x1f511;本章内容&#xff1a;str…

4.网络之TCP

TCP协议(传输层) 文章目录 TCP协议(传输层)1. TCP报文格式2. TCP相关机制2.1 确认应答机制2.2 超时重传机制2.3 连接管理机制&#xff08;重点&#xff09;2.3.1 三次握手2.3.2 四次挥手 2.4 滑动窗口机制2.5 流量控制机制2.6 拥塞控制机制2.7 延迟应答机制2.8 捎带应答机制 3.…

c++ | 字符串与指针的恩断情仇

我想&#xff0c;c/c中难的不是指针&#xff0c;而是其中的变化&#xff0c;尤其是思维的转变。很多东西 就是容易掉进陷阱。好在&#xff0c;你我都是善于思考的码农&#xff01; 大致情况是这样的&#xff0c;底层<–>c语言<–>c<–>应用 而数据的传输的最…

攻击域控丝滑小连招~

点击星标&#xff0c;即时接收最新推文 如果已经获得本地管理员账号或是域管理员账号&#xff0c;那么下一个目标通常是域控制器&#xff0c;对于渗透测试人员来说&#xff0c;光荣与荣耀的那一刻就是成功从域控制器提取所有的哈希值。但即使是拥有管理员权限&#xff0c;也无法…

windows10编译高版本openssl

参考文章 参考文章中的windows编译为低版本&#xff0c;在高版本的openssl编译中已经没有&#xff1a;“ms\do_ms.bat”这个脚本了&#xff0c;现记录下编译过程 1、准备工作 安装ActivePerl&#xff0c;安装后会自动写入环境变量&#xff0c;参照参考文章测试安装成功与否&a…

封装element-table合计行Hooks方法

背景: 在我们常做的后台管理系统中&#xff0c;经常的会遇到关于表格合计行的计算以及显示&#xff0c;如下图&#xff0c;我们采用的是element框架这一套 封装&#xff1a; 由于考虑到该需求是最常见的&#xff0c;每个中心可能都会涉及到&#xff0c;我们封装公共方法&#…