对撞指针
function twoSum(numbers: number[], target: number): number[] {
// 非递减的意思是说 numbers[n] <= numbers[n + 1]
let left = 0
let right = numbers.length - 1
// 从数组开头遍历
// 当 right 超出数组时遍历结束
while (left <= right) {
// 刚好相等的话返回
if (numbers[left] + numbers[right] === target) {
// 因为结果要求下标从 1 开始
// 所以需要 + 1
return [left + 1, right + 1]
}
// 如果结果偏大需要减少
// 所以需要调整 right
if (numbers[left] + numbers[right] > target) {
right -= 1
} else if (numbers[left] + numbers[right] < target) {
// 如果结果偏小需要增加
// 需要调整 left
left += 1
}
}
}