当前位置: 首页 > news >正文

算法基础|双指针核心思想与应用

今天复习双指针技巧,整理一下核心思路和典型用法。双指针是笔试面试中非常高频的算法思想,能把很多问题的时间复杂度从 O (n²) 优化到 O (n)。

目录

一、核心思想

二、典型应用场景

三、例题实战

四、考点提炼


一、核心思想

  • 两个指针分别指向数组 / 链表的不同位置,协同遍历,避免嵌套循环
  • 常见形式:对撞指针(左右两端向中间移动)、快慢指针(一快一慢同向移动)
  • 「双指针排序」本质是:两个指针分别指向两个有序队列,通过比较移动指针,将符合要求的元素逐步移出,最终完成合并或排序,这也可以看作是快慢指针思想的一种延伸。

二、典型应用场景

  1. 数组去重:慢指针记录有效位置,快指针遍历去重
  2. 移动零:将非零元素移到前面,零元素移到后面
  3. 链表环检测:快慢指针相遇则证明有环
  4. 有序数组合并 / 排序:类似归并排序中的合并步骤,用两个指针分别遍历两个有序数组

三、例题实战

解题思路(快慢指针)

  • 慢指针slow:指向当前有效数组的末尾位置(即下一个要保留的元素应该放置的位置)
  • 快指针fast:遍历整个数组,检查每个元素
  • 因为数组是有序的,所以只需要比较nums[fast]nums[slow-2]
    • 如果两者不相等,说明当前元素可以保留,将nums[fast]赋值给nums[slow],并让slow前进
    • 如果相等,说明当前元素已经出现了两次,需要跳过

代码实现

class Solution { public int removeDuplicates(int[] nums) { int n = nums.length; if (n <= 2) return n; // 长度<=2时直接返回 int slow = 2; // 慢指针从2开始,保证前两个元素一定保留 for (int fast = 2; fast < n; fast++) { // 快指针元素与慢指针前两个元素不同,说明可以保留 if (nums[fast] != nums[slow - 2]) { nums[slow] = nums[fast]; slow++; } } return slow; } }

思路总结

  • 慢指针 slow 控制有效数组长度,快指针 fast负责遍历检查
  • 利用数组有序的特性,通过比较nums[fast]nums[slow-2]来判断是否重复超过两次
  • 时间复杂度 O (n),空间复杂度 O (1),完全符合题目要求

四、考点提炼

  1. 双指针的核心优势:原地修改数组,避免额外空间开销
  2. 有序数组的利用:因为数组有序,重复元素必然连续,所以可以通过比较前两个元素来判断重复次数
  3. 边界处理:数组长度 ≤ 2 时直接返回,无需处理
http://www.cnnetsun.cn/news/1361922.html

相关文章:

  • 洛谷P5076 【深基16.例7】普通二叉树(简化版)
  • NX(UG)转 GLTF 格式完整教程:3种方案(推荐迪威模型网在线转换)
  • Qwen3-ForcedAligner-0.6B大模型在语音合成后处理中的应用
  • 避坑指南:Vue3+dataV大屏开发那些坑(从安装到团队协作全流程)
  • 5分钟搞定AI配音:用GPT-SoVITS把你的文字变成自己的声音(Windows版)
  • IntelliJ IDEA高效开发:从入门到精通的实战指南
  • GME多模态向量-Qwen2-VL-2B实战教程:为LLM提供多模态上下文增强的RAG集成方案
  • 如何用开源工具实现窗口放大?让低分辨率内容焕发高清质感
  • Gaussian 计算服务器硬件选型与性能优化指南
  • Flutter开发者的宝藏清单:2023年最值得关注的10个第三方库(附实战代码)
  • 电力电子新手必看:电压型与电流型逆变电路的区别与选型指南
  • 破大防!日本最大高性能“乐天AI3.0”被扒出基于DeepSeekV3架构
  • ANOMALYCLIP: OBJECT-AGNOSTIC PROMPT LEARN-ING FOR ZERO-SHOT ANOMALY DETECTION
  • M2LOrder企业级应用案例:呼叫中心语音转文本后情感打标实战
  • 直播回放下载的技术突破与完整指南:解决三大核心难题的实战方案
  • 帝国CMS 7.5编辑器在导入Word文档时如何处理跨平台格式差异?
  • 巧用国内镜像源,一键破解Pyppeteer的Chromium安装难题
  • 腾讯云使用OpenClaw接入个人微信
  • 安卓手机秒变Linux开发机:Termux+Tmoe一键安装KDE桌面全记录
  • 自动驾驶与手动驾驶混合流仿真:基于Matlab的连续型元胞自动机交通流模型源代码解析与可视化研...
  • 实训3 建库、数据处理并导入库
  • 大模型学习干货:一图看懂传统 RAG 与 Agentic RAG 实战差异,小白也能秒理解
  • STM32与51单片机最小系统对比:为什么你的32项目必须加稳压电路?
  • 每日算法题 10
  • Bebas Neue:开源无衬线字体的商业价值挖掘与全场景应用方法论
  • 如何用picacomic-downloader打造个人漫画图书馆?3步轻松搞定离线阅读
  • OP-CEPH02-在OpenEuler 22.03 LTS-SP4上构建高可用CEPH集群实战
  • 技术拆解:AI低代码架构设计与全链路落地实现
  • 科晶生物双擎AI驱动,解锁“蛋白/核酸”大分子定向设计新范式
  • 深度剖析SWAP模型,从SWAP模型源代码编译到AI大语言模型辅助建模