LeetCode 167. 两数之和 II - 输入有序数组
题目描述
思路分析
由于数组是有序的,我们可以使用双指针的方法来解决这个问题。
具体思路如下:
- 初始化两个指针,
left
指向数组的起始位置,right
指向数组的末尾。计算 numbers[left] + numbers[right] 的和:
- 如果和等于
target
,返回这两个指针的下标(加 1)。- 如果和小于
target
,说明需要更大的数,将left
向右移动。- 如果和大于
target
,说明需要更小的数,将right
向左移动。- 重复以上步骤,直到找到答案。
参考代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
func twoSum(numbers []int, target int) []int {
left, right := 0, len(numbers)-1
for left < right {
sum := numbers[left] + numbers[right]
if sum == target {
return []int{left + 1, right + 1} // 返回索引从 1 开始
} else if sum < target {
left++ // 和小于目标值,左指针右移
} else {
right-- // 和大于目标值,右指针左移
}
}
return nil
}
- 时间复杂度:O(n),其中 n 是数组的长度。
- 空间复杂度:O(1),我们只使用了常数级别的额外空间。
1
write your code here
CC BY-NC-SA 4.0
许可协议,转载请注明出处!
本博客所有文章除特别声明外,均采用