双指针,滑动窗口
1数组划分将一组数据划分为不同的区间解决这一类题用双指针算法利用数组下标来充当指针常见的双指针有两种形式一种是对撞指针一种是左右指针。对撞指针一般用于顺序结构中也称左右指针。• 对撞指针从两端向中间移动。一个指针从最左端开始另一个从最右端开始然后逐渐往中间逼 近。• 对撞指针的终止条件一般是两个指针相遇或者错开也可能在循环内部找到结果直接跳出循环也就是left right 两个指针指向同一个位置left right 两个指针错开快慢指针又称为龟兔赛跑算法其基本思想就是使用两个移动速度不同的指针在数组或链表等序列结构上移动。这种方法对于处理环形链表或数组非常有用。其实不单单是环形链表或者是数组如果我们要研究的问题出现循环往复的情况时均可考虑使用快慢指针的思想。快慢指针的实现方式有很多种最常用的一种就是• 在一次循环中每次让慢的指针向后移动一位⽽快的指针往后移动两位实现一快一慢1.1283. 移动零 - 力扣LeetCode两个指针的作用1cur从左往右扫描数组遍历数组2dest已处理的区间内非零元素的最后一个位置这两个指针就将数组划分为了三个区间[0,dest] 已经处理过的区间都是非0元素, [dest1,cur-1] 都是0, [cur,n-1] 没有处理的元素当cur到n时数据就处理完成了过程cur从前往后遍历的时候1遇到0cur2遇到非0swapdest1cur; dest; curclass Solution { public void moveZeroes(int[] nums) { for(int cur 0,dest -1;cur nums.length;cur){ if(nums[cur] ! 0){ dest; int tmp nums[cur]; nums[cur] nums[dest]; nums[dest] tmp; } } } }1.2 三数之和15. 三数之和 - 力扣LeetCode解法一排序暴力枚举利用set去重解法二排序双指针1排序2固定一个数a3在该数后面的区间内利用双指针算法快速找到两个的和等于 -a的即可处理细节问题1去重找到一种结果之后left和right指针要跳过重复元素当使用完一次双指针算法之后i 也要跳过重复元素还需注意避免越界2不漏找到一种结果之后不要停缩小区间继续寻找class Solution { public ListListInteger threeSum(int[] nums) { ListListInteger ret new ArrayList(); Arrays.sort(nums); int n nums.length; for(int i 0;i n;){ if(nums[i] 0 ) break; int left i1; int right n-1; int target -nums[i]; while(left right){ int sum nums[left] nums[right]; if(sum target){ right--; }else if(sum target){ left; } else{ ret.add(new ArrayListInteger(Arrays.asList(nums[i],nums[left],nums[right]))); left; right--; while(left right nums[left] nums[left-1]) left; while(left right nums[right] nums[right 1]) right--; } } i; while(in nums[i] nums[i - 1]) i; } return ret; } }2滑动窗口209. 长度最小的子数组 - 力扣LeetCode方法一暴力枚举出所有的子数组的和方法二利用单调性使用“同向双指针”来优化 ---滑动窗口1先初始化left 0right 02进窗口3判断 是否出窗口更新结果根据题目判断什么时候更新结果滑动窗口的时间复杂度为On因为只是挪动了两遍左右指针nn2nclass Solution { public int minSubArrayLen(int target, int[] nums) { int n nums.length; int sum 0; int len Integer.MAX_VALUE; for(int left 0,right 0; right n;right){ sum nums[right]; while(sum target){ len Math.min(len,right-left1); sum - nums[left]; } } return len Integer.MAX_VALUE ? 0 : len; } }76. 最小覆盖子串 - 力扣LeetCode一暴力解法哈希表 暴力枚举用滑窗口加双指针来进行优化用两个哈希表1号哈希表hash1 用来记录子串的信息2号哈希表hash2用来记录目标串 t 的信息然后实现一个接口函数判断当前窗口是否满足要求用 i 遍历两个哈希表中对应位置的元素如果 t 中某个字符的数量大于窗口字符的数量也就是2号哈希表某个位置大于1号哈希表说明不匹配返回false如果全都匹配返回true在主函数中先将 t 的信息放入2号哈希表中初始化一些变量左右指针left 0right 0目标子串的长度len INT_MAX目标子串的起始位置retleft 通过目标子串的起始位置和长度就可以找到结果当right小于字符串s的长度时一直下列循环1将当前遍历到的元素丢到1号哈希表中2检测当前窗口是否满足条件如果满足条件判断当前窗口是否变小。如果变小则更新长度以及字符串的起始位置retleft也进行更新判断完毕后将左侧元素滑出窗口顺便更新1号哈希表重复上面两个过程直到窗口不满足条件3right遍历下一个元素判断len的长度是否等于INT_MAX如果相等说明没有匹配返回空字符串如果不相等说明匹配返回s中从retleft位置往后len长度的字符串优化优化判断条件使用count标记有效字符串的种类1进窗口的时候进之前当hash2in hash1incount2出窗口的时候出之前当hash2out hash1outcount--3判断条件的时候count hash1.sizeclass Solution { public String minWindow(String ss, String tt) { char[] s ss.toCharArray(); char[] t tt.toCharArray(); //用数组模拟哈希表 int[] hash1 new int[128];//用于统计字符串 t 中字符的频次 int kinds 0;//用于标记字符串t中有多少种字符 for(char ch : t) { if(hash1[ch] 0) kinds; } int[] hash2 new int[128];//统计窗口中字符的出现频次 int len Integer.MAX_VALUE,begin -1; for(int left 0,right 0,count 0;right s.length;right){ char in s[right]; if(hash2[in] hash1[in]) count; while(kinds count){ //更新结果 if(right-left1 len){ begin left; len right-left1; } //出窗口 char out s[left]; if(hash2[out] hash1[out]) count--; hash2[out]--; } } if(begin -1) return new String(); else return ss.substring(begin,beginlen); } }

相关新闻

基于YOLO的猫情绪识别:3200张宠物行为数据集构建与训练实践

基于YOLO的猫情绪识别:3200张宠物行为数据集构建与训练实践

做宠物摄像头项目时,我卡在一个很朴素的问题上:猫到底处于什么状态?如果只是“有猫/没猫”,用现成人脸检测模型就行,但客户要的是“放松、警觉、紧张、害怕、玩耍”这种细粒度情绪反馈。翻遍公开数据集,猫狗…

2026/9/30 13:50:08 阅读更多 →
基于LSTM的航班延误预测:从序列特征工程到模型落地

基于LSTM的航班延误预测:从序列特征工程到模型落地

简介:这份PDF文档聚焦民航领域的航班延误预测问题,面向从事数据建模、机器学习应用及空管运行优化的技术人员与研究者。文档以循环神经网络为核心,系统讲解RNN与LSTM单元相混合的深度学习算法设计思路,并结合民航空管历史真实数据…

2026/9/30 13:50:08 阅读更多 →
多智能体集群落地指南:DeepAgents、MCP、A2A与Skills架构实践

多智能体集群落地指南:DeepAgents、MCP、A2A与Skills架构实践

前一阵我把手头的 AI 项目从"一个什么都能干的大 Agent"拆成了"一群各有分工的小 Agent"。折腾完 DeepAgents、MCP、A2A、Skills 这套组合之后,最大的感受是:以前总觉得 Agent 不够聪明,其实问题往往是出在结构上——把太…

2026/9/30 13:50:08 阅读更多 →

最新新闻

browser-use 接入 Oracle OCI Generative AI:ChatOCIRaw 原始 API 集成实战指南

browser-use 接入 Oracle OCI Generative AI:ChatOCIRaw 原始 API 集成实战指南

人工智能AI Agent浏览器控制GUI 自动化MCP 服务 【免费下载链接】browser-use Agents that use the browser. 项目地址: https://gitcode.com/GitHub_Trending/br/browser-use 点击查看 免费下载 本文围绕 browser-use 开源仓库中的 OCI Raw API 集成模块&#xff…

2026/9/30 14:32:26 阅读更多 →
火山方舟 Small套餐 ark-code-latest 模型选型实战指南:TaoToken 统一 Key 接入配置

火山方舟 Small套餐 ark-code-latest 模型选型实战指南:TaoToken 统一 Key 接入配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 14:32:26 阅读更多 →
怎么判断一个选题值不值得写?AI能帮做热度判断吗?

怎么判断一个选题值不值得写?AI能帮做热度判断吗?

怎么判断一个选题值不值得写?AI能帮做热度判断吗?做内容最耗人的不是写,是选:每天一堆备选选题,到底哪个值得花时间?凭感觉选,经常写完没人看。这篇给一套可复用的选题判断框架,并讲…

2026/9/30 14:32:26 阅读更多 →
20260917-基于Freeswitch的软电话互播流程

20260917-基于Freeswitch的软电话互播流程

一、安装和启动Freeswitch虚拟机连接的是内网,无法上网下载freeswitch。DS给的方案是,用VMware模拟出来一个虚拟机,连接外网后下载,之后再通过finalshell搞到内网的虚拟机上。但是弄了半天也没成功。于是将希望寄托于前人安装的fr…

2026/9/30 14:32:26 阅读更多 →
西门子840D驱动通信故障(12000/12001报警)的深度解析

西门子840D驱动通信故障(12000/12001报警)的深度解析

Drive-CLiQ通信原理、常见原因、现场排查实例、预防建议 一、12000/12001报警是什么? 在西门子840D数控系统的日常维护中,驱动通信类报警是最常见也是最令人头疼的问题之一。12000报警(Drive: PROFIBUS/PROFINET 通讯故障)和1200…

2026/9/30 14:31:25 阅读更多 →
android ListView详解:从Adapter到复用机制的完整实践

android ListView详解:从Adapter到复用机制的完整实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 14:31:25 阅读更多 →

日新闻

Base64 图片头部特征识别:从文件头到格式判断的完整指南

Base64 图片头部特征识别:从文件头到格式判断的完整指南

1. 项目概述:为什么说看懂 base64 图片头部是基本功这几年跟 base64 打交道的机会越来越多,后端接口返回图片、前端渲染验证码、小程序里存小图、还有一些老系统导出报表,动不动就给你一段长到怀疑人生的 base64 字符串。很多人拿到字符串就直…

2026/9/30 0:00:35 阅读更多 →
Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

简介:本资源是一份面向Java初学者与课程设计学生的公交站牌广告灯箱管理系统毕业设计文档,聚焦城市公共广告资源信息化管理痛点,提供从需求分析到技术实现的完整方案。文档采用标准学术论文结构,含摘要、英文摘要、目录及五章正文…

2026/9/30 0:00:35 阅读更多 →
用 Redis Lua 构建大模型 API 多租户原子配额治理体系

用 Redis Lua 构建大模型 API 多租户原子配额治理体系

我去年年底接了一个内部 AI 平台的治理需求,背景很直接:公司把 DeepSeek、MiniMax 这类大模型 API 统一封装成内部网关,开放给几个业务团队用。结果第一个月账单出来,额度直接超了 4 倍。仔细查日志,发现原因并不复杂—…

2026/9/30 0:00:35 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/29 16:41:41 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/29 19:29:29 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/29 5:58:00 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/29 3:55:56 阅读更多 →