【Leetcode】滑动窗口合集
这里写目录标题
- 209.长度最小的子数组
- 题目
- 思路
- 代码
- 3. 无重复字符的最长子串(medium)
- 题目
- 思路
- 11. 最大连续 1 的个数 III
- 题目
- 思路
- 1658. 将 x 减到 0 的最⼩操作数
- 题目
- 思路
- 代码
- 904. 水果成篮
- 题目
- 思路
- 代码
- 438.找到字符串中所有字母的异位词
- 题目
- 思路
- 代码
209.长度最小的子数组
题目

思路
- 因为数组中的数字都是正数,所以我们可以利用单调性使用滑动窗口的方式来实现
- 用两个指针left和right维护一段区间 当right向右移动时,这个区间内的和增大,当left向右移动时,这个区间内的和减少,这就是这道题目的单调性,我们就可以利用单调性来解题
代码
class Solution {public int minSubArrayLen(int target, int[] nums) {int sum = 0;int ret = Integer.MAX_VALUE;for(int left = 0, right = 0; right < nums.length; right++){sum += nums[right];//如果窗口内元素大于target此时就要移动left指针,直到窗口内值小于target,并且过程中不断更新结果while(sum >= target){ret = Math.min(ret,right - left + 1);sum -= nums[left++];}}return ret == Integer.MAX_VALUE ? 0 : ret;}
}
3. 无重复字符的最长子串(medium)
题目

思路
- 利用滑动窗口维护一个区间来找最长字串,利用哈希表来检查是否有重复元素
- 创建left指针和right指针,right指针每次向后走,就将当前位置的字符放在哈希表中,如果,此时这个元素在哈希表中出现次数超过一次,就移动left指针,每次移动left指针都要将left指针所指向的位置的元素删除,直到这个元素只出现一次,再次移动right指针
class Solution {public int lengthOfLongestSubstring(String s) {int[] hash = new int[128];//数组模拟哈希表int ret = 0;char[] arr = s.toCharArray();for(int left = 0, right = 0; right < s.length(); right++){hash[arr[right]]++;//每次将right位置的元素放在哈希表中while(hash[arr[right]] > 1){//当放进去的元素重复时,就开始移动左指针删除做指针指向的元素hash[arr[left++]]--;}ret = Math.max(ret,right-left+1);}return ret;}
}
11. 最大连续 1 的个数 III
题目

思路
- 根据题意翻转0,我们可以将问题转化为数组中最长的不超过k个0的序列
- 此时根据滑动窗口就可以很好的解决这道题目
class Solution {public int longestOnes(int[] nums, int k) {int cnt = 0;int ret = 0;for(int left = 0,right = 0; right < nums.length; right++){//如果进窗口的元素是0,则0计数器+1if(nums[right] == 0){cnt++;}//此时窗口中0的个数超出了要求,移动左指针left调整窗口,使其符合题意while(cnt == k + 1){if(nums[left++] == 0){cnt--;}}ret = Math.max(ret,right-left+1);}return ret;}
}
1658. 将 x 减到 0 的最⼩操作数
题目

思路
- 这道题通过题意,可以转化为和为sum-x的最大子数组
- 使用滑动窗口来解决此题
代码
class Solution {public int minOperations(int[] nums, int x) {int sum = 0;for(int i = 0;i < nums.length; i++){sum += nums[i];}int k = sum - x;if(k < 0){return -1;}int ret = -1;sum = 0;for(int left = 0, right = 0; right < nums.length; right++){sum += nums[right];while(sum > k){sum -= nums[left++];}if(sum == k){ret = Math.max(ret,right - left + 1);}}if(ret == -1){return -1;}return nums.length - ret;}
}
904. 水果成篮
题目

思路
- 题目已经暗示我们使用滑动窗口来解决问题,把问题转化成最长的只有两种数字的字串
- 通过哈希表的方式来记录是否超出种类
代码
class Solution {public int totalFruit(int[] fruits) {Map<Integer,Integer> hash = new HashMap<>();int ret = 0;for(int left = 0, right = 0; right < fruits.length; right++){hash.put(fruits[right],hash.getOrDefault(fruits[right],0) + 1);while(hash.size() > 2){hash.put(fruits[left],hash.get(fruits[left]) -1);if(hash.get(fruits[left]) == 0){hash.remove(fruits[left]);}left++;}ret = Math.max(ret,right - left + 1);}return ret;}
}
438.找到字符串中所有字母的异位词
题目

思路
- 通过滑动窗口的方式,窗口大小恒为p字符串的长度,用哈希表分别存放两个字符串的每个字符,如果两个哈希表相同,则将这个窗口左下标放在结果集中
代码
class Solution {public List<Integer> findAnagrams(String s, String p) {List<Integer> ret = new ArrayList<>();Map<Character,Integer> start = new HashMap<>();Map<Character,Integer> end = new HashMap<>();for(int i = 0; i < p.length(); i++){start.put(p.charAt(i),start.getOrDefault(p.charAt(i), 0) + 1);}for(int left = 0, right = 0; right < s.length(); right++){end.put(s.charAt(right),end.getOrDefault(s.charAt(right), 0) + 1);if(right - left + 1 == p.length()){if(start.equals(end)){ret.add(left);if(end.get(s.charAt(left)) == 1){end.remove(s.charAt(left));}else {end.put(s.charAt(left),end.getOrDefault(s.charAt(left), 0) - 1);}}else{end.put(s.charAt(left),end.getOrDefault(s.charAt(left), 0) - 1);if(end.get(s.charAt(left)) == 0){end.remove(s.charAt(left));}}left++;}}return ret;}
}
相关文章:
【Leetcode】滑动窗口合集
这里写目录标题 209.长度最小的子数组题目思路代码 3. 无重复字符的最长子串(medium)题目思路 11. 最大连续 1 的个数 III题目思路 1658. 将 x 减到 0 的最⼩操作数题目思路代码 904. 水果成篮题目思路代码 438.找到字符串中所有字母的异位词题目思路代码…...
【C++】STL详解(九)—— set、map、multiset、multimap的介绍及使用
📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:C学习 🎯长路漫漫浩浩,万事皆有期待 上一篇博客:【C】STL…...
计组—— I/O系统
📕:参考王道课件 目录 一、I/O系统的基本概念 1.什么是“I/O”? 编辑2.主机如何和I/O设备进行交互? 3.I/O控制方式 (1)程序查询方式 (2)程序中断方式 (3&#x…...
基于vc6+sdk51开发简易文字识别转语音的程序
系统:window7 软件:vc6.0 目的:简易文字转语音真人发声 利用2023国庆小长假,研究如何将文言转语音,之前在网上查询相关知识,大致了解微信语音转换,翻译官之类软件的原理,但要加入神…...
DevOps:自动化部署和持续集成/持续交付(CI/CD)
DevOps:自动化部署和持续集成/持续交付(CI/CD) 在现代软件开发领域,DevOps(Development和Operations的组合)已经成为一个不可或缺的概念。它代表了一种将软件开发和运维(Operations)…...
专业图标制作软件 Image2icon 最新中文 for mac
Image2Icon是一款用于Mac操作系统的图标转换工具。它允许用户将常见的图像文件(如PNG、JPEG、GIF等)转换为图标文件(.ico格式),以便在Mac上用作应用程序、文件夹或驱动器的自定义图标。 以下是Image2Icon的一些主要功…...
数据结构:顺序表
SeqList.h #pragma once #include<stdio.h> #include<assert.h> #include<stdlib.h>typedef int SLDataType; //#define NULL 0typedef struct SeqList {SLDataType* a;int size;//顺序表中存储的有效元素的个数int capacity;//空间的大小 }SL;void SLInit(…...
僵尸进程的产生与处理
僵尸进程(Zombie Process)是指在操作系统中已经完成了执行,但其父进程尚未调用wait()或waitpid()来获取其终止状态的子进程。当一个进程结束时,操作系统会保留该进程的一些基本信息,包括进程ID(PID…...
TouchEffects - Android View点击特效
官网 GitHub - likaiyuan559/TouchEffects: Android View点击特效TouchEffects,几行代码为所有控件添加点击效果 项目简介 Android View点击特效TouchEffects,几行代码为所有控件添加点击效果 TouchEffects能够帮助你更快速方便的增加点击时候的效果,TouchEffect…...
从ContinuousEventTimeTrigger/ContinuousProcessingTimeTrigger代码看如何实现一个自定义的触发器
背景 当我们想要实现提前触发计算的触发器时,我们可以使用ContinuousEventTimeTrigger/ContinuousProcessingTimeTrigger作为触发器达到比如几分钟触发一次计算并发送计算结果的类,我们本文就从代码角度解析下实现自定义触发器的一些注意事项 Continuo…...
Linux 5种网络模型
[参考]:《黑马程序员Redis》https://www.bilibili.com/video/BV1cr4y1671t/?p166&share_sourcecopy_web&vd_source9e65300ccca322aeb367bb1eb677b0fc [参考]:《操作系统》 [参考]:《UNIX网络编程》 为了避免用户应用导致冲突甚至内…...
10.1 调试事件读取寄存器
当读者需要获取到特定进程内的寄存器信息时,则需要在上述代码中进行完善,首先需要编写CREATE_PROCESS_DEBUG_EVENT事件,程序被首次加载进入内存时会被触发此事件,在该事件内首先我们通过lpStartAddress属性获取到当前程序的入口地…...
Linux系统常用指令篇---(一)
Linux系统常用指令篇—(一) 1.cd指令 Linux系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件。 语法:cd 目录名 功能:改变工作目录。将当前工作目录改变到指定的目录下。 (简单理解为进入指定目录下) 举例: cd .. : 返…...
【初识Linux】:常见指令(1)
朋友们、伙计们,我们又见面了,本期来给大家解读一下有关Linux的基础知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门到精通 数…...
STM32复习笔记(四):看门狗
目录 (一)简介 (二)IWDG IWDG的CUBEMX工程配置 IWDG相关函数(非常少,所以直接贴上来): (三)WWDG (一)简介 看门狗分为独立看门…...
【C++进阶(七)】仿函数深度剖析模板进阶讲解
💓博主CSDN主页:杭电码农-NEO💓 ⏩专栏分类:C从入门到精通⏪ 🚚代码仓库:NEO的学习日记🚚 🌹关注我🫵带你学习C 🔝🔝 模板进阶 1. 前言2. 仿函数的概念3. 仿函数的实…...
基于SSM的电动车上牌管理系统(有报告)。Javaee项目。
演示视频: 基于SSM的电动车上牌管理系统(有报告)。Javaee项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring SpringM…...
mstsc无法保存RDP凭据, 100%生效
问题 即使如下两项都打勾,其还是无法保存凭据,特别是连接Ubuntu (freerdp server): 解决方法 网上多种复杂方法,不生效,其思路是修改后台配置,以使mstsc跟平常一样自动记住凭据。最后,如下的…...
OpenGLES:绘制一个混色旋转的3D球体
效果展示 本篇博文会实现一个混色旋转的3D球体 一.球体解析 前面几篇博文讲解了如何使用OpenGLES实现不同的3D图形 本篇博文讲解怎样实现3D世界的代表图形:一个混色旋转的3D球体 1.1 极限正多面体 如果有学习过我前几篇3D图形绘制的博文,就知道要想…...
Spring AOP 基于注解源码整理
导入配置类 EnableAspectJAutoProxy 注解导入 AspectJAutoProxyRegistrarImportBeanDefinitionRegistrar#registerBeanDefinitions向容器中加入AnnotationAwareAspectJAutoProxyCreatorAnnotationAwareAspectJAutoProxyCreator#initBeanFactory初始化ReflectiveAspectJAdvisor…...
开源物联网平台SiteWhere:微服务架构下的设备管理与数据流实战
1. 项目概述:一个开源的物联网应用平台如果你正在寻找一个能帮你快速搭建、管理和扩展物联网应用的核心平台,而不是从零开始造轮子,那么SiteWhere这个开源项目绝对值得你花时间深入了解。它不是一个简单的设备连接网关,而是一个功…...
Next.js功能开关实践:用happykit/flags实现灰度发布与A/B测试
1. 项目概述:为什么我们需要一个功能开关系统?在软件开发,尤其是现代Web应用和微服务架构的迭代过程中,我们经常面临一个经典困境:新功能开发完成后,是直接全量发布给所有用户,还是先小范围灰度…...
时间序列自监督学习实战:VIbCReg框架迁移与性能优化
1. 项目概述:当计算机视觉的自监督学习遇上时间序列在机器学习领域,获取高质量、大规模的标注数据一直是个老大难问题,尤其是在时间序列分析这个方向。无论是工业设备的振动监测、医疗心电信号分析,还是金融市场的波动预测&#x…...
HealthGPT入门教程:5分钟快速搭建你的个人健康助手
HealthGPT入门教程:5分钟快速搭建你的个人健康助手 【免费下载链接】HealthGPT Query your Apple Health data with natural language 💬 🩺 项目地址: https://gitcode.com/gh_mirrors/he/HealthGPT 想要用自然语言查询你的Apple健康…...
技术团队的“1对1沟通”:别等员工提离职了才聊真心话
在软件测试领域,我们习惯于用脚本验证系统的稳定性,用压测工具探测性能的边界,却常常忽略了对团队中最重要的“系统”——人——进行定期的健康检查。许多技术管理者,尤其是从资深测试工程师晋升上来的团队负责人,往往…...
从CANdb++到Matlab:手把手教你读懂DBC文件里的信号映射与物理值转换
从CANdb到Matlab:手把手教你读懂DBC文件里的信号映射与物理值转换 在汽车电子和嵌入式系统开发中,DBC文件作为CAN总线通信的"字典",承载着整车网络通信的核心协议。对于刚接触汽车网络通信的工程师来说,面对DBC文件中密…...
常见的 17 种 RAG 方案解析
近年来,随着大语言模型(LLM)的广泛应用,检索增强生成(Retrieval-Augmented Generation,RAG)系统逐渐成为连接私有知识库与智能问答的核心架构。RAG 不仅弥补了大模型在实时性与事实性上的不足&a…...
OpenClaw工具如何快速配置接入Taotoken平台
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 OpenClaw工具如何快速配置接入Taotoken平台 对于使用OpenClaw这类智能体(Agent)工具的开发者而言ÿ…...
如何快速掌握LeRobot:从零开始部署机器人AI的完整实践指南
如何快速掌握LeRobot:从零开始部署机器人AI的完整实践指南 【免费下载链接】lerobot 🤗 LeRobot: Making AI for Robotics more accessible with end-to-end learning 项目地址: https://gitcode.com/GitHub_Trending/le/lerobot 想要将最先进的A…...
通过API Key管理与审计日志功能加强企业级应用安全
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过API Key管理与审计日志功能加强企业级应用安全 将大模型能力集成到企业级应用,不仅关乎功能实现,更是一…...
