【力扣hot100】双指针专题
文章目录283. 移动零双指针11. 盛最多水的容器双指针167. 两数之和 II - 输入有序数组双指针15. 三数之和42. 接雨水前后缀分解相向双指针总结283. 移动零283. 移动零双指针使用双指针左指针指向当前已经处理好的序列的尾部右指针指向待处理序列的头部。右指针不断向右移动每次右指针指向非零数则将左右指针对应的数交换同时左指针右移。注意到以下性质左指针左边均为非零数右指针左边直到左指针处均为零。因此每次交换都是将左指针的零与右指针的非零数交换且非零数的相对顺序并未改变。classSolution{publicvoidmoveZeroes(int[]nums){intleft0,right0;while(rightnums.length){if(nums[right]!0){inttemnums[left];nums[left]nums[right];nums[right]tem;left;}right;}}}11. 盛最多水的容器11. 盛最多水的容器双指针如果短的边界不变不管长的边界怎么向内移动容积只会变小所以每次要移动短的边界每次将对应的数字较小的那个指针往另一个指针的方向移动一个位置就表示我们认为这个指针不可能再作为容器的边界了classSolution{publicintmaxArea(int[]height){intl0,rheight.length-1;intans0;while(lr){inttemMath.min(height[l],height[r])*(r-l);ansMath.max(ans,tem);if(height[l]height[r])l;elser--;}returnans;}}167. 两数之和 II - 输入有序数组167. 两数之和 II - 输入有序数组双指针sum过大则最大数不选于是right--sum过小则最小数不选于是leftclassSolution{publicint[]twoSum(int[]numbers,inttarget){intleft0,rightnumbers.length-1;while(leftright){intsumnumbers[left]numbers[right];if(sumtarget){returnnewint[]{left1,right1};}if(sumtarget){right--;}else{left;}}returnnewint[]{};}}15. 三数之和15. 三数之和为方便双指针以及跳过相同元素先把 nums 排序。枚举 nums[i]问题变成 nums[j]nums[k]−nums[i]题目转换为167. 两数之和相似。如何避免重复三元组在外层循环中如果nums[i] nums[i−1]则跳过nums[i]直接 continue。在内层循环中当三数之和等于 0 时为避免把相同的三元组计入答案跳过后续相同的 nums[j] 和 nums[k]也可以只跳过相同的 nums[j]。classSolution{publicListListIntegerthreeSum(int[]nums){Arrays.sort(nums);//先排序成有序的ListListIntegeransnewArrayList();intnnums.length;for(inti0;in-2;i){if(i0nums[i]nums[i-1]){//nums[i]去重遇到重复直接跳过continue;}if(nums[i]nums[i1]nums[i2]0)break;//优化一if(nums[i]nums[n-1]nums[n-2]0)continue;//优化二intji1,kn-1;while(jk){intsumnums[i]nums[j]nums[k];if(sum0){j;}elseif(sum0){k--;}else{ans.add(List.of(nums[i],nums[j],nums[k]));j;while(jknums[j]nums[j-1]){//nums[j]去重j;}k--;while(kjnums[k]nums[k1]){//nums[k]去重k--;}}}}returnans;}}优化如果当前最小的三个数相加都大于0即nums[i] nums[i 1] nums[i 2] 0则说明后面的数不可能存在符合题目的直接break如果当前nums[i]加上最大的两个数还小于0即nums[i] nums[n - 1] nums[n - 2] 0则说明i太小直接跳过这个i把nums[i]用int x代替会更省时List.of() 快速打包几个元素成一个只读列表在 LeetCode 中非常常用一行代码就能返回一个列表结果42. 接雨水42. 接雨水前后缀分解先从左到右计算从0到这个位置的最大高度再从右到左计算从结尾到这个位置的最大高度然后由min(前,后) - 高度得到每个位置能接多少雨水并累加起来classSolution{publicinttrap(int[]height){intnheight.length;int[]qnewint[n];int[]hnewint[n];q[0]height[0];h[n-1]height[n-1];for(inti1;in;i){q[i]Math.max(q[i-1],height[i]);}for(intin-2;i0;i--){h[i]Math.max(h[i1],height[i]);}intans0;for(inti0;in-1;i){ansMath.min(q[i],h[i])-height[i];}returnans;}}时间复杂度O(n)空间复杂度O(n)相向双指针优化一下空间复杂度原理类似11. 盛最多水的容器classSolution{publicinttrap(int[]height){intnheight.length;intans0;intleft0;intrightn-1;intpreMax0;// 前缀最大值随着左指针 left 的移动而更新intsufMax0;// 后缀最大值随着右指针 right 的移动而更新while(leftright){preMaxMath.max(preMax,height[left]);sufMaxMath.max(sufMax,height[right]);if(preMaxsufMax){anspreMax-height[left];left;}else{anssufMax-height[right];right--;}}returnans;}}总结双指针Two Pointers通过维护两个指针的位置让两个指针按照某种规则移动从而减少不必要的遍历。传统暴力fori:forj:判断时间复杂度O(n²)双指针left → ← right两个指针共同移动时间复杂度O(n)核心不需要回头通过指针移动缩小问题范围

相关新闻

Shopify/TikTok/淘宝三大生态AI设计适配指南(含平台算法偏好白皮书V2.3)

Shopify/TikTok/淘宝三大生态AI设计适配指南(含平台算法偏好白皮书V2.3)

更多请点击: https://kaifayun.com 第一章:Shopify/TikTok/淘宝三大生态AI设计适配指南(含平台算法偏好白皮书V2.3) AI生成内容在跨平台部署时,必须遵循各生态底层算法对视觉语义、交互信号与元数据结构的差异化建模逻…

2026/11/1 5:37:09 阅读更多 →
树莓派全息投影制作指南:从硬件搭建到交互实现

树莓派全息投影制作指南:从硬件搭建到交互实现

1. 从“全息舱”的幻想,到树莓派的现实“全息舱”这个词,听起来就像是科幻电影里的玩意儿——一个能投射出立体影像、让人仿佛置身于另一个空间的设备。很多极客和创客看到这个标题,第一反应可能是激动,紧接着就是迷茫&#xff1a…

2026/10/25 4:45:53 阅读更多 →
Unity角色下蹲与滑行系统:基于Input System与状态机的工业级实现

Unity角色下蹲与滑行系统:基于Input System与状态机的工业级实现

1. 项目概述与核心思路在Unity里做角色移动,新手和老手的分水岭往往就在“下蹲”和“滑行”这两个动作上。乍一看,不就是按个键让角色高度变低吗?但真做起来,你会发现这里面的坑一个接一个:下蹲时摄像机怎么平滑过渡&a…

2026/10/27 16:21:37 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/1 0:24:43 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/31 10:20:19 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/31 10:20:23 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/1 1:06:58 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/31 10:30:19 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/31 9:29:43 阅读更多 →

日新闻

周新闻

月新闻