news 2026/6/10 20:18:46

【算法通关】双指针技巧深度解析:从基础到巅峰(Java 最优解)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【算法通关】双指针技巧深度解析:从基础到巅峰(Java 最优解)
【算法通关】双指针技巧深度解析:从基础到巅峰(Java 最优解)

我的主页:寻星探路
个人专栏:《JAVA(SE)----如此简单!!! 》 《从青铜到王者,就差这讲数据结构!!!》
《数据库那些事!!!》 《JavaEE 初阶启程记:跟我走不踩坑》
《JavaEE 进阶:从架构到落地实战 》 《测试开发漫谈》
《测开视角・力扣算法通关》 《从 0 到 1 刷力扣:算法 + 代码双提升》
《Python 全栈测试开发之路》
没有人天生就会编程,但我生来倔强!!!

寻星探路的个人简介:


在处理数组相关算法时,双指针(Two Pointers)能够巧妙地利用区间单调性或位置关系,将原本需要 的暴力搜索优化至 。本文精选四道经典题型,附带保姆级代码注释。


一、 移动零 (Move Zeroes) —— 快慢指针

1. 算法思路

  • 慢指针 (slow):指向“下一个非零元素应该存放的位置”。
  • 快指针 (fast):遍历数组,寻找非零元素。
  • 通过交换,非零元素被“推”到前面,零自然被“挤”到了后面。

2. Java 代码实现

classSolution{publicvoidmoveZeroes(int[]nums){// slow 指针之前(不含 slow)全是非零数intslow=0;for(intfast=0;fast<nums.length;fast++){// 当快指针发现非零数时if(nums[fast]!=0){// 如果快慢指针不相等,说明中间有 0,需要交换if(fast>slow){inttemp=nums[slow];nums[slow]=nums[fast];nums[fast]=temp;}// 无论是否交换,slow 都要后移,因为当前 slow 位置已被非零数占据slow++;}}}}

二、 盛最多水的容器 (Container With Most Water) —— 左右指针

1. 算法思路

  • 核心原理:木桶效应。容量由“短板”决定。
  • 指针移动逻辑:若移动长板,宽度减小,高度依然受限于短板,容量只会变小;只有移动短板,才可能换来更高的高度。

2. Java 代码实现

classSolution{publicintmaxArea(int[]height){intleft=0,right=height.length-1;// 定义左右边界intmax=0;// 存储最大面积while(left<right){// 1. 计算当前面积:宽 (right - left) * 高 (左右两端的最小值)intcurrentArea=Math.min(height[left],height[right])*(right-left);// 2. 更新全局最大面积max=Math.max(max,currentArea);// 3. 贪心策略:哪边矮,就移动哪边的指针if(height[left]<height[right]){left++;}else{right--;}}returnmax;}}

三、 三数之和 (3Sum) —— 排序 + 左右指针

1. 算法思路

  • 排序:使数组有序,方便使用双指针并进行去重。
  • 枚举:固定第一个数a,在剩下的区间里通过双指针寻找bc,使得a + b + c = 0

2. Java 代码实现

classSolution{publicList<List<Integer>>threeSum(int[]nums){List<List<Integer>>ans=newArrayList<>();Arrays.sort(nums);// 1. 先排序intn=nums.length;for(inti=0;i<n;i++){// 如果当前数大于 0,由于数组有序,后续三个数之和一定大于 0if(nums[i]>0)break;// 2. 对第一个数 a 去重:如果当前数和前一个数相同,跳过if(i>0&&nums[i]==nums[i-1])continue;intleft=i+1,right=n-1;while(left<right){intsum=nums[i]+nums[left]+nums[right];if(sum==0){ans.add(Arrays.asList(nums[i],nums[left],nums[right]));// 3. 对第二个数 b 去重while(left<right&&nums[left]==nums[left+1])left++;// 4. 对第三个数 c 去重while(left<right&&nums[right]==nums[right-1])right--;left++;right--;}elseif(sum<0){left++;// 和太小,左指针右移增加数值}else{right--;// 和太大,右指针左移减小数值}}}returnans;}}

四、 接雨水 (Trapping Rain Water) —— 双指针巅峰

1. 算法思路

  • 单点逻辑:位置 能接的水 = 。
  • 双指针优化:我们不需要预处理所有高度,只需要用两个指针从两侧向中间靠拢。

2. Java 代码实现

classSolution{publicinttrap(int[]height){intleft=0,right=height.length-1;intleftMax=0,rightMax=0;// 记录左边和右边遇到的最高高度intres=0;while(left<right){// 更新左右两侧目前的最高墙leftMax=Math.max(leftMax,height[left]);rightMax=Math.max(rightMax,height[right]);// 如果左边的墙比右边的墙矮// 意味着:对于 left 这个点,接多少水取决于左侧的 leftMax(因为右侧一定有比它更高的墙)if(leftMax<rightMax){res+=(leftMax-height[left]);left++;}else{// 反之,right 这个点接多少水取决于右侧的 rightMaxres+=(rightMax-height[right]);right--;}}returnres;}}

💡 总结:双指针解题的思考模版

  1. 场景识别
  • 同向指针(快慢指针):常用于处理“原地修改”或“寻找循环/中点”。
  • 相向指针(对撞指针):常用于处理“有序数组寻找两数/多数之和”或“区间极值(盛水/接水)”。
  1. 核心三要素
  • 指针初始化:是(0, length-1)还是(0, 0)
  • 移动条件:什么情况下左移?什么情况下右移?(通常依据单调性判断)。
  • 收缩条件:如何有效跳过重复解(去重)以保证效率?

通过以上四道题的练习,你应该能感受到双指针在降低时间复杂度方面的巨大威力。


感谢你的阅读!如果觉得代码注释对你有帮助,欢迎点赞和收藏!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 13:09:08

GTE中文语义相似度服务优化技巧:提升计算速度的秘籍

GTE中文语义相似度服务优化技巧&#xff1a;提升计算速度的秘籍 1. 引言&#xff1a;GTE 中文语义相似度服务的价值与挑战 随着自然语言处理技术在智能客服、内容推荐和信息检索等场景中的广泛应用&#xff0c;语义相似度计算已成为核心能力之一。传统的关键词匹配方法难以捕…

作者头像 李华
网站建设 2026/6/10 13:18:33

新型量子芯片架构:可重构路由器实现全连接

重新构想量子芯片 某大学的研究人员实现了一种新的超导量子处理器设计&#xff0c;旨在为量子革命所需的大规模、耐用设备提供一种潜在的架构。 与传统将信息处理量子比特布置在二维网格上的典型量子芯片设计不同&#xff0c;该团队设计了一种模块化量子处理器&#xff0c;其核…

作者头像 李华
网站建设 2026/6/10 15:21:20

AI智能实体侦测新手指南:5分钟部署第一个检测模型

AI智能实体侦测新手指南&#xff1a;5分钟部署第一个检测模型 引言&#xff1a;从理论到实践的最后一公里 很多对AI安全感兴趣的朋友都有类似的经历&#xff1a;看了三个月机器学习教材&#xff0c;好不容易找到一个开源项目想练手&#xff0c;却被Docker配置、CUDA驱动这些&…

作者头像 李华
网站建设 2026/6/10 13:31:59

中文情感分析API开发:StructBERT保姆级教程

中文情感分析API开发&#xff1a;StructBERT保姆级教程 1. 引言&#xff1a;中文情感分析的现实需求 在当今数字化时代&#xff0c;用户生成内容&#xff08;UGC&#xff09;呈爆炸式增长&#xff0c;社交媒体、电商平台、客服系统每天产生海量中文文本。如何从中快速识别用户…

作者头像 李华
网站建设 2026/6/10 15:34:28

AI智能实体侦测效果可视化:3D攻击图谱,云端实时渲染

AI智能实体侦测效果可视化&#xff1a;3D攻击图谱&#xff0c;云端实时渲染 引言&#xff1a;当安全演示遇上3D可视化 想象一下这样的场景&#xff1a;你正在向客户演示网络安全防护方案&#xff0c;屏幕上却只能展示枯燥的表格数据和静态图表。客户的眼神逐渐游离&#xff0…

作者头像 李华
网站建设 2026/6/10 13:45:59

AI安全工程师私藏工具链:7个预置镜像,一键调用不折腾

AI安全工程师私藏工具链&#xff1a;7个预置镜像&#xff0c;一键调用不折腾 引言 作为一名自由安全研究员&#xff0c;你是否经常遇到这样的困扰&#xff1a;每接一个新项目&#xff0c;就要从头配置环境&#xff0c;VPN、沙箱、检测工具装个没完&#xff0c;宝贵的时间都浪…

作者头像 李华