学习首页/数组算法/双指针交互演示 · JavaScript

代码与动画 TWO POINTERS

双指针.

在有序数组两端移动指针,寻找和为目标值的一对元素。

时间 O(n)空间 O(1)升序数组

原理与执行逻辑

在升序数组两端各放一个指针,通过两数之和与目标的大小关系排除一侧候选。每次移动一个指针,直到找到配对或指针相遇。

执行步骤

  1. left 指向开头,right 指向末尾。
  2. 计算 a[left] + a[right],等于目标就返回两个下标。
  3. 和偏小时增加 left,和偏大时减少 right。
  4. left 不再小于 right 时停止,未命中返回空数组。

关键理解

和偏小时,当前左值与范围内任何更小右值的和也不足;和偏大时,当前右值与任何更大左值的和也超限。排序是这种排除逻辑的前提。

简短示例

[1, 2, 4, 6, 9] 查找和 10,先比较 1 + 9,直接得到下标 [0, 4];目标为 8 时右移左指针或左移右指针,最终找到 2 + 6。

代码与执行动画

STEP 0 / 4
双指针
function twoSumSorted(a, target) {  let left = 0, right = a.length - 1;  while (left < right) {    const sum = a[left] + a[right];    if (sum === target) return [left, right];    if (sum < target) left++;    else right--;  }  return [];}
10 行 · 0 个片段标记
10 · L21426394125 · R
当前数据正在操作已访问 / 命中标记 / 指针
0

初始化两端指针

目标和 10,从左右两端开始比较。

配置演示数据

应用后重新生成执行过程,可单步观察结果。

实现说明

双指针的操作规则

输入必须有序;返回从 0 开始的两个下标。和偏小时左指针右移,和偏大时右指针左移,找不到返回空数组。

对应题目与扩展练习

观察执行过程后,按题目约束调整输入、返回值与实现。链接打开官方题目页面。