滑动窗口系列(不定长滑动窗口长度) 9/1

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

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

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

不定长的滑动窗口长度,其中windowSize=无重复字符的最长字串的长度;

那么如何得到最长字串的长度?

使用哈希表+while循环遍历

如果遍历到的字母在哈希表中存在,此时字串中出现重复字符;

此时我们就要移动left改变滑动窗口的左边界;使得哈希表中不再出现s.charAt(right);

因为新的字符串的开始一定是不包含重复字符的,如果左边界还是出现了s.charAt(right),那么它的长度一定比之前的小;

 while (map.getOrDefault(ch, 0) != 0) {max = Math.max(max, right - left);map.put(s.charAt(left),map.get(s.charAt(left))-1);left++;}
代码:
class Solution {public int lengthOfLongestSubstring(String s) {Map<Character, Integer> map = new HashMap<>();int max = 0;int left = 0;int right = 0;while (right < s.length()) {char ch = s.charAt(right);while (map.getOrDefault(ch, 0) != 0) {max = Math.max(max, right - left);map.put(s.charAt(left),map.get(s.charAt(left))-1);left++;}map.put(ch, map.getOrDefault(ch, 0) + 1);right++;}max=Math.max(max,right-left);return max;}
}

2.找到最长的半重复子字符串

给你一个下标从 0 开始的字符串 s ,这个字符串只包含 0 到 9 的数字字符。

如果一个字符串 t 中至多有一对相邻字符是相等的,那么称这个字符串 t 是 半重复的 。

输入:s = "52233"

输出:4

解释:

最长的半重复子字符串是 "5223"。整个字符串 "52233" 有两个相邻的相同数字对 22 和 33,但最多只能选取一个。

思路:

滑动窗口大小未知,当相邻的相同数字存在两对的时候,此时滑动窗口就要左移;

那么左移到什么地方就可以停止了?左移到相邻的相同数字只存在一对的时候;

            while(count>1){if(s.charAt(left)==s.charAt(left+1))count--;left++;}
代码:
class Solution {public int longestSemiRepetitiveSubstring(String s) {int count=0;int max=0;int left=0;int right=0;while(right<s.length()){if(right>0&&s.charAt(right)==s.charAt(right-1)){count++;}while(count>1){if(s.charAt(left)==s.charAt(left+1))count--;left++;}max=Math.max(max,right-left+1);right++;}return max;}
}

模板:

题目中会给出限制滑动窗口的长度的条件,然后循环遍历每一个元素,首先判断是否会对条件有影响;当不满足题目中的条件之后,就要移动滑动窗口的左边界,直至满足;

eg:第一题中是子串中不含有无重复字符;

eg:第二题中是子串中半重复字符对只可以出现一次

class Solution {public int longestSemiRepetitiveSubstring(String s) {int res=0;int left=0;int right=0;while(right<s.length()){if(题目中需要满足的条件){count++;}//如果条件不满足,就要移动左边界直至条件满足while(不满足的条件){//移动左边界}max=Math.max(max,right-left+1);right++;}return max;}
}

3.数组的最大美丽值(排序+滑动窗口)

题意:

给定一个数组nums,k。数组中的每一个值都可以替换成(nums[i]-k,nums[i]+k)中的任意一个数。

数组的美丽值:数组中元素相同的个数有多少个;

求数组的最大美丽值

输入:nums = [4,6,1,2], k = 2
输出:3  

4 4 1 4

思路:

这道题其实考的就是最大重叠区间,数组中每一个数组都对应了一个区间,求最大重叠区间的个数是多少。

排好序之后,判断nums[right]和nums[left]之间的差值和2*k的关系

为什么是2*k呢?因为nums[right]可以被替换成-k以内的,而nums[left]可以被替换成+k以内的,所以只要相差在2k以内,就有公共区域

代码:
class Solution {public int maximumBeauty(int[] nums, int k) {Arrays.sort(nums);int res=0;int left=0;int right=0;while(right<nums.length){if(nums[right]-nums[left]>2*k)left++;res=Math.max(res,right-left+1);right++;}return res;}
}

总结:定长滑动窗口/不定长滑动窗口的区别

定长滑动窗口:每次left右移 只需要移动一次,因为滑动窗口的长度是固定的;
不定长滑动窗口:每次left右移,需要移动到满足题目中的条件为止,因此窗口的长度是不固定的

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

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

相关文章

探讨抗晃电应用技术在煤化工生产中的运用

摘要&#xff1a;当前&#xff0c;电力供应面临的压力日益增大&#xff0c;用户群体的多样性也日益复杂。在电网运行中&#xff0c;电压波动&#xff08;晃电&#xff09;现象频繁发生。研究指出&#xff0c;电压波动的原因多种多样&#xff0c;包括自然因素、设备故障以及人为…

ISO C++ 和 GNU C++ 的区别

C 的 ios 标准和 gnu 标准是两种编译器标准或模式&#xff0c;主要由编译器在编译 C 代码时所遵循的规范决定。它们之间的区别主要在于是否包含标准之外的扩展以及对特定功能的支持。 1. ISO C 标准 (-stdc11, -stdc14, -stdc17, 等) 定义: ISO C 标准是由国际标准化组织 (IS…

EXO项目StandardNode;max_generate_tokens;buffered_token_output;is_finished;

目录 StandardNode max_generate_tokens buffered_token_output 构造函数参数 类属性 总结 is_finished max_generate_tokens self.buffered_token_output StandardNode _process_tensor result是一个np.ndarray ,result.size == 1是什么意思 StandardNode max_g…

五、Selenium操作指南(二)

文章目录 四、获取页面元素属性&#xff08;一&#xff09;get_attribute获取属性&#xff08;二&#xff09;获取文本&#xff08;三&#xff09; 获取其他属性 五、页面交互操作&#xff08;一&#xff09;输入文本 send_keys()&#xff08;二&#xff09;点击 click()&#…

kaggle平台free使用GPU

1、注册 请保证在【科学上网】条件下进入如下操作&#xff0c;只有在注册账户和手机号验证时需要。 step1&#xff1a;注册账户 进入kaggle官网&#xff1a;https://www.kaggle.com/&#xff0c;点击右上角【Register】进入注册页面 最好选择使用邮箱注册&#xff08;&#…

【例003】利用MATLAB绘制有趣平面图形

题目&#xff1a; 用 ezplot 画出由方程 sin ⁡ ( x 2 m y 2 1000 ) cos ⁡ ( x y ) \sin(x^2\frac{my^2}{1000})\cos(xy) sin(x21000my2​)cos(xy) 确定隐函数的图形。 求解&#xff1a; 我们分别取m为100&#xff0c;1000,10000不同的值&#xff0c;绘制不同情况下的图…

3.1 线性结构

令序列X、Y、Z的每个元素按顺序进栈&#xff0c;且每个元素进栈.出栈各一次&#xff0c;则不可能得到出栈序列&#xff08; &#xff09;。 A. XYZ B. XZY C. ZXY D. YZX 正确答案是 C。 解析 ZXY不可能得到这个序列&#xff0c;因为当Z最先出栈&#xff0c;说明X、Y已经入栈&a…

MySQL-进阶篇-锁(全局锁、表级锁、行级锁)

文章目录 1. 锁概述2. 全局锁2.1 介绍2.2 数据备份2.3 使用全局锁造成的问题 3. 表级锁3.1 表锁3.1.1 语法3.1.2 读锁3.1.3 写锁3.1.4 读锁和写锁的区别 3.2 元数据锁&#xff08;Meta Data Lock&#xff0c;MDL&#xff09;3.3 意向锁3.3.1 案例引入3.3.2 意向锁的分类 4. 行级…

数据分析中的上钻、下钻、切片和切块

“上钻”、“下钻”、“切片”、“切块”是数据分析和数据展示中的常见概念,尤其是在处理多维数据或数据仓库时。以下是每个术语的解释: 上钻(Drill Up): 这是指从数据的更详细层级上升到更概括的层级。比如,假设你有一个按时间划分的销售数据,当前在查看按月的销售情况…

推荐使用阿贝云免费云服务器、免费虚拟主机

官网地址&#xff1a;https://www.abeiyun.com 阿贝云的免费云服务器简直是我在互联网世界里的一大惊喜发现&#xff01; 首先&#xff0c;它的性能表现十分出色。服务器的响应速度超快&#xff0c;无论是访问网站还是运行应用&#xff0c;都能迅速给出反馈&#xff0c;几乎没…

蒙特卡罗方法算π

蒙特卡罗法就是在一块区域里撒随机点&#xff0c;看落在指定区域的点数 基于以下关系式&#xff0c;可以计算π&#xff0c;MATLAB代码如下 N10^7; xunifrnd(0,1,[1,N]); yunifrnd(0,1,[1,N]); frequencysum(y<1./(1x.^2)); area4*frequency/N

Java多线程入门介绍

在Java编程中&#xff0c;线程并发是一个核心且复杂的话题&#xff0c;它允许开发者利用现代多核处理器的计算能力&#xff0c;通过并行执行多个任务来优化应用程序的性能。然而&#xff0c;线程并发也带来了数据竞争、死锁、线程饥饿等问题&#xff0c;需要开发者深入理解并发…

day-45 全排列 II

思路 与上一题思路相同&#xff0c;代码也基本一致&#xff0c;只是需要全排列不重复 解题过程 可以利用Arrays.sort()函数将nums数组进行排序&#xff0c;这样相同的全排列数字的位置也会相同&#xff0c;可以利用List的contains()函数进行判断&#xff0c;如果不重复则加入答…

【MySQL数据库管理问答题】第7章 MySQL 安全

目录 1. 哪些常见的措施可以用来防范网络安全风险&#xff1f; 2. 请对安全套接字层&#xff08;SSL&#xff09;和传输层安全性&#xff08;TLS&#xff09;协议加以简要得说明。 3. 请对 ca.pem、server-cert.pem、server-key.pem、ca-key.pem、client-cert.pem、client-ke…

Java面试自我介绍

持续更新中 模块序号目录链接前言介绍1前言地址2介绍地址基础知识3计算机网络地址4操作系统地址5Java基础地址6Java并发地址7Java虚拟机地址中间件8Mysql地址9Redis地址10Elasticsearch地址11RabbitMQ地址12RocketMQ地址框架13分布式系统地址14MyBatis地址15Dubbo地址16Spring地…

【fastapi】fastapi的hello world

新建这样的目录结构 main.py的代码如下 from fastapi import FastAPI from fastapi.templating import Jinja2Templatesapp FastAPI()# 初始化 Jinja2 模板引擎 templates Jinja2Templates(directory"templates")app.get("/") async def home():contex…

《C++打造高效网络爬虫:突破数据壁垒》

在当今信息爆炸的时代&#xff0c;网络爬虫成为了获取大量数据的重要工具。而 C作为一种高效、强大的编程语言&#xff0c;在实现高效网络爬虫方面具有独特的优势。 首先&#xff0c;C的高效性能是实现高效网络爬虫的关键。与其他编程语言相比&#xff0c;C在运行速度和内存管…

网站建设完成后, 做seo必须知道的专业知识之--网络爬虫

网络爬虫&#xff0c;也称为网络蜘蛛或网络机器人&#xff0c;是一种能够自动浏览和采集互联网信息的程序。在大数据时代&#xff0c;网络爬虫技术在信息采集领域发挥着重要作用&#xff0c;通过自动化方式高效获取数据&#xff0c;广泛应用于搜索引擎、数据分析、金融数据采集…

Windows Edge浏览器的兼容性问题

针对Windows Edge浏览器的兼容性问题&#xff0c;我们可以采取一系列措施来尝试修复。以下是一系列详细的解决步骤和策略&#xff0c;旨在帮助用户解决在使用Edge浏览器时遇到的兼容性问题。 一、检查并更新Edge浏览器 1. 自动更新检查 打开Edge浏览器&#xff0c;点击右上角…

海外新闻稿发布:企业如何充分利用数字化媒体进行

在全球数字化进程加速的时代&#xff0c;企业要在激烈的国际市场中脱颖而出&#xff0c;利用数字化媒体进行海外新闻稿发布是一个不可或缺的战略。精确的策略和有效的执行能够帮助企业获得更高的曝光度和市场份额。以下将从多个角度探讨如何充分利用数字化媒体进行海外新闻稿发…