当前位置: 首页 > news >正文

算法通关村——滑动窗口高频问题

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

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。

1.1 滑动窗口

找到最长字串需要找到字串的首尾位置,而这个首尾位置就是滑动窗口的大小。题目中出现了重复,一般是想到使用hashmap作为存储元素,而这个里面可以将字符串的相应的字符作为k,然后它的下标作为value,一旦遇到有重复字符的,就将左窗口移到当前的位置的右边一位,作为新的字符串的开始位置。

在这里插入图片描述

    public int lengthOfLongestSubstring(String s) {if(s.length() == 0) return 0;// 左窗口开始int left = 0;int max = 0;// 存放k:字符,v:字符下标HashMap<Character,Integer> hashMap = new HashMap<>();for(int right = 0;right<s.length();right++){// 里面包含当前字符,需要移动左窗口的位置if(hashMap.containsKey(s.charAt(right))){left = Math.max(left,hashMap.get(s.charAt(right))+1);}// 不包含,就将元素和它的下标添加hashMap.put(s.charAt(right),right);// 比较大小max = Math.max(max,right-left+1);}return max;}

2. 至多包含两个不同字符的最长子串

给定一个字符串 s ,找出 至多 包含两个不同字符的最长子串 t ,并返回该子串的长度,这就是LeetCode159题。例如:
输入: “eceba”
输出: 3
解释: t 是 “ece”,长度为3。

2.1 滑动窗口

字符串依然是需要首尾位置,采用滑动窗口,和第一题类似,不过这一题的关键在于字符串是两个不同的字符,判断字符是否重复可以使用hashmap,而问题在于如何判断只有两个字符,出现第三个字符应该如何去除之前的字符。
可以使用 int del_idx = Collections.min(hashmap.values());
hashmap.remove(s.charAt(del_idx));
在这里插入图片描述

public int lengthOfLongestSubstringTwoDistinct(String s) {if (s.length() <= 2) {return s.length();}// 最大长度int maxLength = 2;int left = 0;int right = 0;HashMap<Character, Integer> map = new HashMap<>();while (right < s.length()) {// map长度小于3,意味着还没出现第三个不一样的字符,此时可以继续添加,更改对于元素下标if(map.size() < 3) {map.put(s.charAt(right), right++);}// map长度等于3,此时出现了第三个不一样的字符,需要删除一个最小位置下标的字符,然后移动左指针到当前删除下标的下一个位置if(map.size() == 3){int del_idx = Collections.min(map.values());map.remove(s.charAt(del_idx));left = del_idx + 1;}maxLength = Math.max(maxLength, right - left);}return maxLength;}

3. 至多包含 K 个不同字符的最长子串

LeetCode340题。
题目的完整要求是:给定一个字符串 s,找出 至多 包含 k 个不同字符的最长子串T。示例:
输入: s = “eceba”, k = 2
输出: 3
解释: 则 T 为 “ece”,所以长度为 3。

3.1 滑动窗口

这一题和上面一样,只不过是将2替换成了k,判断的是否改成k就可以。

    public int lengthOfLongestSubstringKDistinct(String s, int k) {if (s.length() < k) return 0;int left = 0;int right = 0;HashMap<Character, Integer> map = new HashMap<>();int maxLength = k;while (right < s.length()) {if (map.size() < k+1) {map.put(s.charAt(right), right++);}if(map.size() == k+1){int del_idx = Collections.min(map.values());map.remove(s.charAt(del_idx));left = del_idx + 1;}maxLength = Math.max(maxLength, right - left);}return maxLength;}

4. 长度最小的子数组

长度最小的子数组
给定一个含有 n 个正整数的数组和一个正整数 target 。

找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
示例 1:
输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。

4.1 滑动窗口

这一题主要思路就是计算滑动窗口区间内的元素和,如果元素和小于目标值,可以继续添加,如果元素和大于目标值,那么就需要将左窗口位置的元素从元素和里面去除,然后移动指针,直到元素和小于目标值。

  public int minSubArrayLen(int target, int[] nums) {int left =0;int right =0;int minLength = Integer.MAX_VALUE;int sum = 0;while(right<nums.length){sum += nums[right++];while(sum >= target){minLength = Math.min(minLength,right-left);sum = sum -  nums[left++];}}return minLength == Integer.MAX_VALUE ? 0 : minLength;}

5. 盛最多水的容器

盛最多水的容器
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
说明:你不能倾斜容器。

输入:[1,8,6,2,5,4,8,3,7]
输出:49

5.1 滑动窗口

这一题思路还是很清晰的,首先定义两个指针分别指向首尾,然后向中间移动,移动过程中需要判断左右两个高度,选出最短的,然后计算面积。

 public int maxArea(int[] height) {int left = 0;int right = height.length - 1;int maxAre = 0;while(left < right){maxAre = height[left] < height[right] ? Math.max(maxAre,(right-left) * height[left++] ):Math.max(maxAre,(right-left) * height[right--]);}return maxAre;}

相关文章:

算法通关村——滑动窗口高频问题

1. 无重复字符的最长子串 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所以其长度为 3。 1.1 滑动窗口 找到最长字串需要找到字串的首尾位置…...

mybatis源码学习-2-项目结构

写在前面,这里会有很多借鉴的内容,有以下三个原因 本博客只是作为本人学习记录并用以分享,并不是专业的技术型博客笔者是位刚刚开始尝试阅读源码的人,对源码的阅读流程乃至整体架构并不熟悉,观看他人博客可以帮助我快速入门如果只是笔者自己观看,难免会有很多弄不懂乃至理解错误…...

selenium 自动化测试——环境搭建

安装python&#xff0c;并且使用pip命令安装 selenium pip3 install selenium 然后尝试第一次使用selenium 完成一个简单的测试自动化脚本 from selenium import webdriver from selenium.webdriver.common.by import By import timedriver webdriver.Chrome() driver.get(…...

得物一面,场景题问得有点多!

题目来源&#xff1a;https://www.nowcoder.com/discuss/525371909735792640 前文 本期是【捞捞面经】系列文章的第 1 期&#xff0c;持续更新中…。 《捞捞面经》系列正式开始连载啦&#xff0c;据说看了这个系列的朋友都拿到了大厂offer~ 欢迎星标订阅&#xff0c;持续更新…...

Prompt Tuning 和instruct tuning

Prompt Tuning 是啥&#xff1f; prompt的思想是&#xff0c;把下游任务的输入转化为预训练模型的原始任务。 以bert作为举例&#xff0c;假设任务是文本分类。“今天天气很好。”我们想判断一下这句话的情感是正面还是负面 fine-tune的方法是在bert之后接一个head&#xff0…...

springboot 与异步任务,定时任务,邮件任务

异步任务 在Java应用中&#xff0c;绝大多数情况下都是通过同步的方式来实现交互处理的&#xff1b;但是在处理与第三方系统交互的时候&#xff0c;容易造成响应迟缓的情况&#xff0c;之前大部分都是使用多线程来完成此类任务&#xff0c;其实&#xff0c;在Spring 3.x之后&a…...

2022年06月 C/C++(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C++编程(1~8级)全部真题・点这里 第1题:小白鼠再排队2 N只小白鼠(1 < N < 100),每只鼠头上戴着一顶有颜色的帽子。现在称出每只白鼠的重量,要求按照白鼠重量从小到大的顺序输出它们头上帽子的颜色。帽子的颜色用 “red”,“blue”等字符串来表示。不同的小白鼠可…...

【C++】C++11新特性(下)

上篇文章&#xff08;C11的新特性&#xff08;上&#xff09;&#xff09;我们讲述了C11中的部分重要特性。本篇接着上篇文章进行讲解。本篇文章主要进行讲解&#xff1a;完美转发、新类的功能、可变参数模板、lambda 表达式、包装器。希望本篇文章会对你有所帮助。 文章目录 一…...

python内网环境安装第三方包

文章目录 一、问题二、解决方法三、代码实现 一、问题 内网安装第三方包的应用场景&#xff0c;一般是一些需要在没网的环境下进行开发的情况。这些环境一般仅支持本地局域网访问&#xff0c;所以只能在不下载任何第三方包的情况下艰难开发。 二、解决方法 将当前应用依赖的第…...

javaScipt

javaScipt 一、JavaScript简介二、javaScript基础1、输入输出语法2、变量3、常量4、数据类型4.1、数字型 number4.2、字符串类型 string4.3、布尔类型 boolean4.4、未定义类型 undefined4.5、null 空类型4.6、typeof 检测变量数据类型 5、数据类型转换5.1、隐式转换5.2、显示转…...

Linux(实操篇三)

Linux实操篇 Linux(实操篇三)1. 常用基本命令1.7 搜索查找类1.7.1 find查找文件或目录1.7.2 locate快速定位文件路径1.7.3 grep过滤查找及"|"管道符 1.8 压缩和解压类1.8.1 gzip/gunzip压缩1.8.2 zip/unzip压缩1.8.3 tar打包 1.9 磁盘查看和分区类1.9.1 du查看文件和…...

数学之美 — 1

为什么你会想和他人共享那些美丽的事物呢&#xff1f;因为这会让他&#xff08;她&#xff09;感到愉悦&#xff0c;也能让你在分享的过程中重新欣赏一次事物的美。 ——David Blackwell 1、感官之美&#xff0c;对于那些有规律的事物&#xff0c;你可以利用自己的视觉、触觉、…...

python中的global关键字

在Python中&#xff0c;global关键字用于在函数内部声明一个全局变量。默认情况下&#xff0c;函数内部的变量是局部变量&#xff0c;只能在函数内部访问。使用global关键字可以在函数内部创建或修改全局变量&#xff0c;使其在函数外部也可见和修改。 以下是使用global关键字…...

Matlab图像处理-幂次变换

幂次变换 如下图所示的幂次变换函数曲线图&#xff1a; 当γ <1时&#xff0c;效果和对数变换相似&#xff0c;放大暗处细节&#xff0c;压缩亮处细节&#xff0c;随着数值减少&#xff0c;效果越强。 当γ >1时&#xff0c;放大亮处细节&#xff0c;压缩暗处细节&…...

浏览器输入 URL 地址,访问主页的过程

分析&回答 浏览器解析域名&#xff1b;TCP建立连接&#xff1b;浏览器向服务器发送HTTP请求&#xff1b;服务器解析请求并返回HTTP报文&#xff1b;浏览器解析并渲染页面&#xff1b;断开连接。 反思&扩展 域名解析的流程 查找浏览器缓存——我们日常浏览网站时&am…...

每日一学————基本配置和管理

一、交换机的基本配置 配置enable口令、密码和主机名 Switch> (用户执行模式提示符) Switch>enable (进入特权模式) Switch# …...

解决 filezilla 连接服务器失败问题

问题描述&#xff1a; 开始一直用的 XFTP 后来&#xff0c;它变成收费软件了&#xff0c;所以使用filezilla 代替 XFTP 之前用的还好好的&#xff0c;今天突然就报错了&#xff1a;按要求输入相关字段&#xff0c;连接 连接失败&#xff01;&#xff01;&#xff01;o(╥﹏╥…...

如何使用Java进行机器学习?

在Java中进行机器学习&#xff0c;可以使用各种开源机器学习库和框架来实现。以下是一些常用的Java机器学习库&#xff1a; Weka&#xff1a;Weka 是一个非常流行的机器学习库&#xff0c;提供了大量的算法和工具&#xff0c;以及用于数据预处理、特征选择和可视化的功能。 De…...

springsecurity+oauth 分布式认证授权笔记总结12

一 springsecurity实现权限认证的笔记 1.1 springsecurity的作用 springsecurity两大核心功能是认证和授权&#xff0c;通过usernamepasswordAuthenticationFilter进行认证&#xff1b;通过filtersecurityintercepter进行授权。springsecurity其实多个filter过滤链进行过滤。…...

如何在职业生涯中取得成功

工作中让你有强烈情绪波动的事情 在我的工作经历中&#xff0c;有一次让我经历了强烈情绪波动的事件。我曾在一个高压的项目团队中工作&#xff0c;我们需要在极短的时间内完成一个复杂的客户项目。这个项目的截止日期非常紧迫&#xff0c;而项目的规模和要求也一直在不断增加…...

Hive-安装与配置(1)

&#x1f947;&#x1f947;【大数据学习记录篇】-持续更新中~&#x1f947;&#x1f947; 个人主页&#xff1a;beixi 本文章收录于专栏&#xff08;点击传送&#xff09;&#xff1a;【大数据学习】 &#x1f493;&#x1f493;持续更新中&#xff0c;感谢各位前辈朋友们支持…...

链表模拟栈

定义节点 class Node {var num: Int _var next: Node _def this(num: Int) {thisthis.num num}override def toString: String s"num[${this.num}]" }定义方法 class LinkStack {private var head new Node(0)def getHead: Node head//判断是否为空def isEmp…...

MySQL基础篇:数据库概述和部署

SQL 概述 SQL&#xff0c;一般发音为sequel&#xff0c;SQL的全称Structured Query Language)&#xff0c;SQL用来和数据库打交道&#xff0c;完成和数据库的通信&#xff0c;SQL是一套标准。但是每一个数据库都有自己的特性别的数据库没有,当使用这个数据库特性相关的功能,这…...

大数据面试题:MapReduce压缩方式

面试题来源&#xff1a; 《大数据面试题 V4.0》 大数据面试题V3.0&#xff0c;523道题&#xff0c;679页&#xff0c;46w字 可回答&#xff1a;1&#xff09;Hadoop常见的压缩算法有哪些&#xff1f; 问过的一些公司&#xff1a;网易云音乐(2022.11)&#xff0c;阿里(2020.…...

【ICer的脚本练习】“精通各种语言的hello world!“

系列的目录说明请见&#xff1a;ICer的脚本练习专栏介绍与全流程目录_尼德兰的喵的博客-CSDN博客 前言 这一节呢主要是检查一下Linux和win环境是不是能正常的支持咱们的脚本学习&#xff0c;所以来答应各种语言的hello world!&#xff0c;毕竟打印了就是学会了٩(๑❛ᴗ❛๑)۶…...

解决npm install报错: No module named gyp

今天运行一个以前vue项目&#xff0c;启动时报错如下&#xff1a; ERROR Failed to compile with 1 error上午10:19:33 error in ./src/App.vue?vue&typestyle&index0&langscss& Syntax Error: Error: Missing binding D:\javacode\Springboot-MiMall-RSA\V…...

Leetcode 面试题 17.01 不用加号的加法

设计一个函数把两个数字相加。不得使用 或者其他算术运算符。 示例: 输入: a 1, b 1 输出: 2 提示&#xff1a; a, b 均可能是负数或 0结果不会溢出 32 位整数 我的答案&#xff1a; 一、信息 1.设计一个函数把两个数相加 2.不得使用或者其他运算符 3.a,b均为负数或…...

一个 MySQL 数据库死锁的案例和解决方案

本文介绍了一个 MySQL 数据库死锁的案例和解决方案。 场景 生产环境出了一个偶现的数据库死锁问题&#xff0c;导致少部分业务处理失败。 分析特征之后&#xff0c;发现是多个线程并发执行同一个方法&#xff0c;更新关联的数据时可能会出现&#xff0c;把场景简化概括一下&…...

AMBEO 双声道空间音频现已迈进直播制作领域

图片来源&#xff1a;Unsplash&#xff0c;作者&#xff1a;Bence Balla-Schottner AMBEO 双声道空间音频现已迈进直播制作领域 为所有观众解锁更加身临其境的听觉体验 森海塞尔将功能强大的 AMBEO 双声道空间音频技术引入了广播电视直播应用领域&#xff0c;对所有体育赛事广…...

在VSCode上画UML的三个插件

2023年9月2日&#xff0c;周六晚上 因为写代理模式的博客时需要画UML&#xff0c;所以就在网上找了半天&#xff0c; 最后觉得VSCode上的这三个插件比较好用 目录 三个画UML的VSCode插件PlantUMLDraw.io IntegrationUMLet我个人推荐使用PlantUML 三个画UML的VSCode插件 Pla…...

厦门小程序开发/seo推广经验

SpringBootWeb应用源码解析 在 Spring 及 Spring Boot 的使用过程中&#xff0c;应用最广泛的当属 Web 应用&#xff0c;而 Web 应用又往往部署在像 Tomcat 这样的 Servlet 容器中。 本章将带领大家学习 Spring Boot 中 Web 应用的整合以及在此过程中与直接使用 Spring 的差别…...

网站上线后的工作/长沙seo网络营销推广

工作流程引擎 虽然平时多数工作都是后台&#xff0c;但是刚进入公司时还做的web流程。不得不佩服流程很多 今天突然有点对流程的想法&#xff0c;做一下记录&#xff0c; 1.流程精简2.流程可配置可扩展性好3.流程向导傻瓜化(越来越复杂的流程估计记住的人很少,新人接收困难&…...

微信扫码下单小程序怎么做/橘子seo

php变量php变量用于存储字符&#xff0c;数字&#xff0c;数组甚至对象资源等&#xff0c;以便在我们需要的地方使用.$变量名值;变量名以字母(a-z,A-Z)或者下划线_开始,后面可以跟任意字母或数字以及下划线&#xff0c;但不能是空格. 例子&#xff1a;<?php$var_char"…...

怎么做QQ信任网站/app推广活动策划方案

题意&#xff1a;开车从起点出发&#xff0c;到终点的路上有一些加油站&#xff0c;不同的加油站油价不同&#xff0c;要求输出到终点时最少花费的钱思路&#xff1a;贪心&#xff0c;在加满油可以走的最大距离内分情况讨论&#xff1a;在范围内存在加油站油价比当前加油站小&a…...

帮人做网站怎么收费/地推团队如何收费

商人的诀窍 Description E_star和von是中国赫赫有名的两位商人&#xff0c;俗话说的好无商不奸&#xff0c;最近E_star需要进一批苹果。可是他需要的苹果只有von才有&#xff0c;von的苹果都存在他的传说中很牛叉的仓库里&#xff0c;每个仓库都存了不同种类的苹果&#xff0c;…...

wordpress多格式视频播放插件/推广产品的文案

ResourceDictionary是一个键控对象字典&#xff0c;可在 XAML 和代码中使用。在其中我们可以定义样式、模板等以方便在其他页面中随时调用。 首先我们新建一个ResourceDictionary页面如下图&#xff1a; 然后向资源字典文件中写入以下代码&#xff0c;分别是样式和模板&#xf…...