两数之和 II(输入有序数组)——双指针那点儿事儿
大家好,今天咱聊一道非常经典而且非常“干净利落”的题:两数之和 II - 输入有序数组。这题在 LeetCode 上是 Two Sum II - Input array is sorted
,给定一个已排序的数组 numbers
和一个目标值 target
,找出两个数使得它们相加等于 target
,返回它们的下标(通常是 1-based)。看起来完全是套路题,但它能帮你把双指针思想吃透——这是做算法题的基础功。
下面我把思路、代码、复杂度、细节和踩坑点都讲清楚,像咱平时聊天那样直白易懂。
一、双指针的直觉(为什么有效?)
数组是排好序的,这点很重要。设左右指针 l
指向开头,r
指向结尾:
- 如果
numbers[l] + numbers[r] == target
,恭喜,找到答案; - 如果和比
target
大,说明右边太大了,应该把r
左移(减小和); - 如果和比
target
小,说明左边太小了,应该把l
右移(增大和)。
这个思路利用的是