首页/新闻资讯/正文详情

双指针算法详解与LeetCode经典题解

发布时间:2026/11/14 3:29:41 来源:云帆数科 栏目:资讯中心
双指针算法详解与LeetCode经典题解
1. 双指针算法核心思想解析双指针算法Two Pointers Technique是算法竞赛和面试中最常用的优化技巧之一其核心在于通过维护两个指针索引来高效解决问题。根据指针移动方式的不同可以分为三种经典模式1.1 快慢指针模式快指针fast和慢指针slow以不同速度遍历数据结构典型应用包括链表环检测Floyd判圈算法寻找链表中点解决滑动窗口问题# 链表环检测示例 def hasCycle(head): slow fast head while fast and fast.next: slow slow.next fast fast.next.next if slow fast: return True return False1.2 对撞指针模式左右指针从两端向中间移动适用于有序数组的搜索和统计两数之和问题回文字符串验证盛水容器问题# 两数之和II示例 def twoSum(numbers, target): left, right 0, len(numbers)-1 while left right: sum_val numbers[left] numbers[right] if sum_val target: return [left1, right1] elif sum_val target: left 1 else: right - 11.3 分离指针模式两个指针分别遍历不同数组/序列常用于归并排序的合并操作判断子序列问题数组交集问题关键技巧指针移动条件的选择直接影响算法效率通常需要结合问题特点设计移动策略2. LeetCode经典四题深度剖析2.1 移动零#283问题描述将数组中的所有0移动到末尾保持非零元素相对顺序解法思路快慢指针初始化在起点快指针探索非零元素慢指针标记待交换位置def moveZeroes(nums): slow 0 for fast in range(len(nums)): if nums[fast] ! 0: nums[slow], nums[fast] nums[fast], nums[slow] slow 1复杂度分析时间复杂度O(n)空间复杂度O(1)常见误区直接删除0后补零破坏原数组使用额外数组不符合空间要求2.2 盛最多水的容器#11问题描述找出两条垂直线使得它们与x轴构成的容器可以容纳最多的水优化解法初始化左右指针在数组两端计算当前面积并更新最大值移动较短边的指针def maxArea(height): left, right 0, len(height)-1 max_area 0 while left right: area min(height[left], height[right]) * (right - left) max_area max(max_area, area) if height[left] height[right]: left 1 else: right - 1 return max_area数学证明 移动较长边不可能得到更大面积因为宽度必然减小高度受限于较短板2.3 三数之和#15问题描述找出数组中所有不重复的三元组满足abc0解题步骤数组排序O(nlogn)固定一个数转化为两数之和问题使用对撞指针寻找匹配对def threeSum(nums): nums.sort() res [] for i in range(len(nums)-2): if i 0 and nums[i] nums[i-1]: continue left, right i1, len(nums)-1 while left right: s nums[i] nums[left] nums[right] if s 0: left 1 elif s 0: right - 1 else: res.append([nums[i], nums[left], nums[right]]) while left right and nums[left] nums[left1]: left 1 while left right and nums[right] nums[right-1]: right - 1 left 1 right - 1 return res去重技巧主循环跳过相同元素找到解后跳过相同左右元素2.4 接雨水#42问题描述计算柱子排列能接多少雨水双指针解法维护左右最大高度从较小高度侧开始计算动态更新最大高度def trap(height): left, right 0, len(height)-1 left_max right_max 0 res 0 while left right: if height[left] height[right]: left_max max(left_max, height[left]) res left_max - height[left] left 1 else: right_max max(right_max, height[right]) res right_max - height[right] right - 1 return res算法对比方法时间复杂度空间复杂度适用场景暴力法O(n²)O(1)不推荐动态规划O(n)O(n)通用双指针O(n)O(1)最优单调栈O(n)O(n)需要详细分布时3. 双指针算法进阶技巧3.1 边界条件处理常见边界问题及解决方案空输入处理if not nums: return 0单元素/双元素检查if len(nums) 3: return []指针越界预防while left right and nums[left] nums[left1]:3.2 指针移动策略优化四种典型移动模式固定步长移动如每次1条件跳转移动如跳到下一个不同元素二分移动在有序数据中动态调整移动根据计算结果3.3 多指针协同问题复杂场景下的指针应用# 四数之和问题示例 def fourSum(nums, target): nums.sort() res [] for i in range(len(nums)-3): if i 0 and nums[i] nums[i-1]: continue for j in range(i1, len(nums)-2): if j i1 and nums[j] nums[j-1]: continue left, right j1, len(nums)-1 while left right: total nums[i] nums[j] nums[left] nums[right] if total target: left 1 elif total target: right - 1 else: res.append([nums[i], nums[j], nums[left], nums[right]]) while left right and nums[left] nums[left1]: left 1 while left right and nums[right] nums[right-1]: right - 1 left 1 right - 1 return res4. 实战问题排查指南4.1 常见错误类型错误现象原因分析解决方案死循环指针移动条件缺失检查循环终止条件结果遗漏指针跳过有效解添加打印调试输出顺序错误指针移动方向不当验证排序是否必要重复解去重逻辑不完善增加相邻元素比较边界值错误特殊输入未处理添加前置检查4.2 调试技巧可视化追踪法print(fStep {step}: left{left}, right{right}, nums{nums})断点条件设置if left 3 and right 5: # 设置条件断点 import pdb; pdb.set_trace()小规模测试法assert moveZeroes([0,1,0,3,12]) [1,3,12,0,0]4.3 性能优化策略提前终止条件if nums[i] 0: break # 三数之和优化冗余计算消除# 预计算前缀最大值数组 left_max [0] * len(height) left_max[0] height[0] for i in range(1, len(height)): left_max[i] max(height[i], left_max[i-1])空间复用技巧# 使用输入数组存储中间结果 nums[slow] nums[fast]在实际刷题过程中我发现双指针类问题的解题速度与对问题模式的识别能力直接相关。建议将同类问题集中训练培养对指针移动策略的直觉判断。对于hard难度的问题通常需要结合其他算法思想如贪心、动态规划才能得到最优解。

相关推荐

OpenShell策略驱动运行时管控:从零搭建到生产级实践
OpenShell策略驱动运行时管控:从零搭建到生产级实践

1. 从零认识 OpenShell:它到底解决什么问题第一次听到 OpenShell 这个名字,很多人会下意识以为它又是一个新的命令行工具,或者某个操作系统的壳层替代品。实际上,OpenShell 的定位要具体得多——它是一套面向策略驱动的运行时管控… · 2026/11/7 16:39:34

知识管理中的显性与隐性知识转化机制
知识管理中的显性与隐性知识转化机制

1. 认知星海的隐喻:人类知识的可见部分"星海"这个意象精准描绘了人类文明中那些已被系统化、结构化的知识领域。就像夜空中闪耀的星辰,这些知识具有明确的边界和清晰的连接关系。在技术领域,HTML语言就是典型代表——它通过标签系统… · 2026/11/11 1:52:17

textarea 从能用到好用:自适应高度、字数统计与移动端适配实战
textarea 从能用到好用:自适应高度、字数统计与移动端适配实战

textarea 这个标签,几乎每个写过表单的人都用过,但真正把它用明白的人并不多。我见过太多项目里,textarea 就是一个光秃秃的框,用户输入体验差、提交后数据格式乱、移动端还各种诡异表现。这篇内容就是想把 textarea 从“能用”讲… · 2026/11/3 8:49:13

电工证和电工证区别报名多久拿证 你在外省考的证还能用吗
电工证和电工证区别报名多久拿证 你在外省考的证还能用吗

电工证和电工证区别报名多久拿证 你在外省考的证还能用吗 之前考的证在外省能不能转过来?这可能是很多在外地打工、刚起步的电工兄弟最关心的问题。尤其是从漯河第一次报考的你,面对各种“电工证”的说法,可能已经晕头转向。别急,下面我来给你理清楚“… · 2026/11/14 23:39:32

考电工证直播济宁全流程办理指南:学历不高怕报不上名?电工证含金量不低
考电工证直播济宁全流程办理指南:学历不高怕报不上名?电工证含金量不低

考电工证直播济宁全流程办理指南:学历不高怕报不上名?电工证含金量不低 学历不高怕报不上名?别慌,考电工证直播济宁正火,很多人以为只有高学历才能考证,其实不然,电工证的报考门槛并不高,关键是你得了解清楚流程、材料和含金量。本文从济宁地区出发,… · 2026/11/14 23:39:32

油漆工是不是特种工?多久拿证不花冤枉钱
油漆工是不是特种工?多久拿证不花冤枉钱

油漆工是不是特种工?多久拿证不花冤枉钱 怕考不过白交培训费?你不是一个人,很多准备报考特种作业操作证的朋友都担心这个问题。特别是像油漆工这样的工种,到底是不是特种作业?多久拿证?这些问题直接影响你是否要花时间去考。今天我就从南阳卧龙区应届工… · 2026/11/14 23:39:32

庆阳低压电工证包通过,全国通用怎么考?这流程你得知道
庆阳低压电工证包通过,全国通用怎么考?这流程你得知道

庆阳低压电工证包通过,全国通用怎么考?这流程你得知道 不知道去哪报名怕被中介坑,庆阳低压电工证包通过怎么操作?很多人在办理低压电工证时,最容易踩的坑就是被中介忽悠,花了不少钱,最后还办不了证。别担心,今天我就来给你说清楚,庆阳低压电工证包通… · 2026/11/14 23:39:32

锦州电工证国网可查多久拿证?电工证过期了不知道怎么复审延期怎么办
锦州电工证国网可查多久拿证?电工证过期了不知道怎么复审延期怎么办

锦州电工证国网可查多久拿证?电工证过期了不知道怎么复审延期怎么办 证书过期了不知道怎么复审延期,这是很多电工从业者的共同痛点。尤其在施工企业中,电工证不仅是上岗的“通行证”,更是安全操作的“红线”。锦州电工证国网可查,但很多人不知道如何利用… · 2026/11/14 23:39:32

桂平报考低压电工证在哪考?3个月拿证上岗不愁找工作
桂平报考低压电工证在哪考?3个月拿证上岗不愁找工作

桂平报考低压电工证在哪考?3个月拿证上岗不愁找工作 你是不是正在为找工作发愁?是不是听说电工这个行当门槛低、工资高?别急,关键是你得先有证! 低压电工证… · 2026/11/14 23:38:32

电工证丢失还能补吗?千万别踩坑,丢了证等于失业
电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/14 23:07:54

电力电缆作业证直播报名入口与办理流程良心建议
电力电缆作业证直播报名入口与办理流程良心建议

电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/14 13:23:47

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/14 13:20:59

有初级电工证怎么工作 2026河南最新政策怎么应对
有初级电工证怎么工作 2026河南最新政策怎么应对

有初级电工证怎么工作 2026河南最新政策怎么应对 之前考的证在外省能不能转过来?这个问题我每天被问上百次。2026年河南最新政策对证书跨省转移有了明确说明,特别是南阳市的从业者,需要特别关注。… · 2026/11/14 0:00:31

电工证过期了不知道怎么复审?考电工证自学书+官方报名入口全攻略
电工证过期了不知道怎么复审?考电工证自学书+官方报名入口全攻略

电工证过期了不知道怎么复审?考电工证自学书+官方报名入口全攻略 证书过期了不知道怎么复审延期?很多人遇到这种情况,要么是工作太忙没时间处理,要么是不知道具体流程,导致证书失效,影响工作和项目进展。其实复审并不难,关键是要找准官方报名入口,掌… · 2026/11/14 0:00:31

为什么要低压电工证实操考试考什么
为什么要低压电工证实操考试考什么

为什么低压电工证值不值得考?别再被中介骗了 你是不是也经常看到网上有人在问“低压电工证到底值不值得考”?或者在找报名点时,担心被中间人骗钱?这些问题,我懂,我也经历过。作为一名在应急管理行业摸爬滚打多年的从业者,我深知低压电工证不仅是一个从… · 2026/11/14 0:00:31

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

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

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

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

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

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

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码