【面试算法笔记】0104-数组-滑动窗口
个人主页https://github.com/zbhgis前言本系列主要记录自己学习算法的过程中的感悟。力扣209. 长度最小的子数组链接https://leetcode.cn/problems/minimum-size-subarray-sum/description/注意点滑动窗口做法。这类题的注意点在于窗口长度的控制。1.定义两个指针右指针先移动移动到某个位置后满足题目所需的target条件之后也就是sum target之后开始尝试移动左指针缩小窗口。2.在第一步操作的过程中需要一个额外的sum变量来实时计算窗口的总和right前进就加上新的数left前进就减去这个数。代码class Solution { public int minSubArrayLen(int target, int[] nums) { int left 0; int sum 0; int len Integer.MAX_VALUE; for (int right 0; right nums.length; right ){ sum nums[right]; while (sum target) { len Math.min(len, right - left 1); sum - nums[left]; left ; } } return len Integer.MAX_VALUE ? 0 : len; } }时空复杂度分析虽然是双重循环但是由于内层和外层循环加起来总共访问2n最多所以最坏情况O(2n)O(n)空间复杂度O(1)力扣904. 水果成篮链接https://leetcode.cn/problems/fruit-into-baskets/description/注意点滑动窗口做法。1.类似于上一题这题需要额外创建一个数组来记录水果的类型。2.定义两个指针右指针先移动移动在某个某个位置后满足题目所需的水果类型只有两个之后进一步移动尝试移动右指针直到水果类型有三个就是type 2或者type 3的时候然后再移动左指针来收缩因为没办法精确地停下来缩小窗口。3.其他都类似就是写起来麻烦一些此时通过cnt数组来记录水果类型的个数作用类似于上一题的sum。4.还有就是记录类型种类type的时候开始记录种类的时候需要先cnt再type移除记录种类的时候则是先type再cnt代码class Solution { public int totalFruit(int[] fruits) { int left 0; int len 0; int type 0; int[] cnt new int[fruits.length]; for (int right 0; right fruits.length; right ) { int in fruits[right]; if (cnt[in] 0) type ; cnt[in] ; while (type 2) { int out fruits[left]; cnt[out] --; if (cnt[out] 0) type --; left ; } len Math.max(len, right - left 1); } return len; } }时空复杂度分析虽然是双重循环但是由于内层和外层循环加起来总共访问2n最多所以最坏情况O(2n)O(n)空间复杂度O(n)n为fruits的长度力扣76. 最小覆盖子串链接https://leetcode.cn/problems/minimum-window-substring/description/注意点滑动窗口做法。1.类似于上一题不过这题更难使用普遍的滑动窗口也能成功下面是优化版本。2.首先定义一个diff表示窗口每种字母个数 - t每种字母个数。第一步先获取到窗口为空的情况下两者的差异。之后类似于前两题开始定义两个指针。这题需要额外定义ansLeft 和ansRight因为这个题返回的是具体的数组不是长度了所以要考虑到最后窗口为空的情况。额外定义一个geCnt表示窗口内有geCnt种字母的出现次数 t中相应字母的出现次数。3.开始遍历右指针先移动对应的diff也随之更新。当diff[s[right]] 0的时候说明出现了新字符geCnt也随之更新。直到geCnt kinds说明现在符合题目所要求的字符个数了开始移动左指针。开始更新窗口长度用ansLeft 和 ansRight记录方便后续在循环外返回结果。代码class Solution { public String minWindow(String S, String t) { int[] diff new int[128]; int kinds 0; for (char c : t.toCharArray()) { if (diff[c] 0) { kinds ; } diff[c] --; } int left 0; char[] s S.toCharArray(); int m s.length; int ansLeft -1; int ansRight m; int geCnt 0; for (int right 0; right m; right ) { char c s[right]; diff[c] ; if (diff[c] 0) { geCnt ; } while (geCnt kinds) { if (right - left ansRight - ansLeft) { ansLeft left; ansRight right; } char x s[left]; if (diff[x] 0) { geCnt --; } diff[x] --; left ; } } return ansLeft 0 ? : S.substring(ansLeft, ansRight 1); } }时空复杂度分析虽然是双重循环但是由于内层和外层循环加起来总共访问2n最多所以最坏情况O(2n)O(n)空间复杂度O(128)即O(1)参考https://programmercarl.com/%E6%95%B0%E7%BB%84%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html

相关新闻

`nibabel` 是 Python 中用于读取、写入和操作神经影像数据(如 MRI、fMRI、DWI 等)的核心库

`nibabel` 是 Python 中用于读取、写入和操作神经影像数据(如 MRI、fMRI、DWI 等)的核心库

nibabel 是 Python 中用于读取、写入和操作神经影像数据(如 MRI、fMRI、DWI 等)的核心库,支持多种格式(如 NIfTI .nii/.nii.gz、ANALYZE、DICOM、MINC、PAR/REC 等)。它不进行图像处理或统计建模,而是专注于…

2026/7/13 21:58:01阅读更多 →
5分钟掌握:MediaCrawler新媒体数据采集神器完整指南

5分钟掌握:MediaCrawler新媒体数据采集神器完整指南

5分钟掌握:MediaCrawler新媒体数据采集神器完整指南 【免费下载链接】MediaCrawler-new 项目地址: https://gitcode.com/GitHub_Trending/me/MediaCrawler-new 你是不是经常需要从各大社交平台收集数据,却被复杂的登录验证和反爬机制搞得焦头烂额…

2026/7/13 21:58:01阅读更多 →
Unity手游虚拟摇杆实战:Joystick Pack插件集成与优化指南

Unity手游虚拟摇杆实战:Joystick Pack插件集成与优化指南

1. 项目概述:为什么虚拟摇杆是手游的“命门”在移动端游戏开发里,虚拟摇杆的体验好坏,几乎直接决定了玩家对游戏操作手感的第一印象。一个响应迟钝、滑动不跟手或者UI布局别扭的摇杆,足以让玩家在几分钟内就卸载游戏。我见过太多独…

2026/7/13 21:53:01阅读更多 →
用KMind Zen梳理软件测试点

用KMind Zen梳理软件测试点

一、引言:测试人员的思维导图困境 作为一名软件测试工程师,在日常工作中梳理测试点是一项高频且关键的任务。传统的Excel表格虽然规范,但在测试点梳理阶段往往显得笨重——需求变更时需要来回修改、层级关系不直观、评审时难以一眼看出覆盖范…

2026/7/13 22:53:05阅读更多 →
Stable-diffusion-WebUI API进阶:构建自动化生图工作流

Stable-diffusion-WebUI API进阶:构建自动化生图工作流

1. 从单次调用到自动化工作流第一次用Stable Diffusion WebUI的API生成图片时,我就像拿到新玩具的孩子,兴奋地反复点击运行按钮。直到凌晨三点,盯着满屏的猫咪图片才突然意识到——该升级成自动化流程了。把API调用封装成自动化工作流&#x…

2026/7/13 22:53:05阅读更多 →
3种BLDC电机位置检测方案对比:霍尔传感器 vs 编码器 vs 无传感器FOC

3种BLDC电机位置检测方案对比:霍尔传感器 vs 编码器 vs 无传感器FOC

BLDC电机位置检测技术全景解析:从霍尔传感器到无传感器FOC的深度对比引言:BLDC电机控制的核心挑战在机电一体化系统设计中,无刷直流电机(BLDC)凭借其高效率、长寿命和低维护特性已成为工业伺服、消费电子和汽车电驱领域…

2026/7/13 22:53:05阅读更多 →
多重刺激响应全植物基智能水凝胶基础配比方案(跨多学科协同设计)待验证

多重刺激响应全植物基智能水凝胶基础配比方案(跨多学科协同设计)待验证

一、配比设计底层学科逻辑(多学科交叉支撑) 整套配方并非简单混合原料,融合林产化学、高分子物理、无机材料、传感工程、航天材料、生物工程六大学科理论,各组分各司其职,协同实现五重刺激响应、自修复、电磁屏蔽、温控…

2026/7/13 22:53:05阅读更多 →
SAP MM 自动记账配置详解:OBYC 与 5 种常见业务场景科目确定

SAP MM 自动记账配置详解:OBYC 与 5 种常见业务场景科目确定

SAP MM自动记账配置实战:OBYC事务码与五大业务场景科目映射解析物料管理模块(MM)作为SAP系统的核心组件,其自动记账功能直接关系到企业财务数据的准确性和业务合规性。本文将深入剖析OBYC事务码的配置逻辑,并通过五大典…

2026/7/13 22:53:05阅读更多 →
196反转相加未解之谜:一个小学算术引发的数学边界探索

196反转相加未解之谜:一个小学算术引发的数学边界探索

1. 这不是密码学,也不是量子计算——它只是用小学加法反复折腾一个数字你可能在某个数学爱好者论坛、Reddit的r/math板块,或者某期《Numberphile》视频评论区里,第一次看到“196”这个词被郑重其事地加粗、高亮,甚至配上“未解之谜…

2026/7/13 22:48:05阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/13 4:47:19阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/13 0:50:34阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/13 4:52:09阅读更多 →
卡梅德生物技术快报|蛋白质分离纯化:肠激酶可溶性原核表达 + 两步层析全参数|标准化蛋白质分离纯化 SOP

卡梅德生物技术快报|蛋白质分离纯化:肠激酶可溶性原核表达 + 两步层析全参数|标准化蛋白质分离纯化 SOP

研究痛点提出(提出问题)重组肠激酶是融合标签切除核心工具酶,当前原核表达体系存在三大标准化难题,直接阻碍可复现的蛋白质分离纯化流程搭建:Trx、GST、单 SUMO 标签融合产物绝大多数为包涵体,沉淀占比超 9…

2026/7/13 0:04:58阅读更多 →
语音转文字工具AsrTools:让音频整理变得简单高效

语音转文字工具AsrTools:让音频整理变得简单高效

语音转文字工具AsrTools:让音频整理变得简单高效 【免费下载链接】AsrTools ✨ AsrTools: Smart Voice-to-Text Tool | Efficient Batch Processing | User-Friendly Interface | No GPU Required | Supports SRT/TXT Output | Turn your audio into accurate text …

2026/7/13 0:04:58阅读更多 →
Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改 【免费下载链接】palworld-save-tools Tools for converting Palworld .sav files to JSON and back 项目地址: https://gitcode.com/gh_mirrors/pa/palworld-save-tools 你是否曾经想要调整Palwor…

2026/7/13 0:04:58阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/13 4:21:17阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/13 4:08:53阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/12 21:43:43阅读更多 →