Problem: 167. 两数之和 II - 输入有序数组
思路
枚举数组中的数字,直到等于target时退出
解题方法
因为是有序数组,所以直接利用双指针进行遍历。
l e f t = 0 , r i g h t = n − 1 left=0,right=n-1 left=0,right=n−1。如果相等就 b r e a k break break,如果大于右指针 r i g h t − − right-- right−−,否则左指针 l e f t + + left++ left++
复杂度
-
时间复杂度: O ( n ) O(n) O(n)
-
空间复杂度: O ( 1 ) O(1) O(1)
Code
Python
class Solution:
def twoSum(self, numbers: List[int], target: int) -> List[int]:
left = 0
right = len(numbers) - 1
while left < right:
k = numbers[left] + numbers[right]
if k == target:
break
elif k > target:
right -= 1
else:
left += 1
return [left + 1, right + 1]
Java
class Solution {
public int[] twoSum(int[] numbers, int target) {
int n = numbers.length;
int left = 0;
int right = n - 1;
int[] ans = new int[2];
while (left < right){
if(numbers[left] + numbers[right] == target){
break;
}
else if(numbers[left] + numbers[right] < target){
left += 1;
}
else{
right -= 1;
}
}
ans[0] = left + 1;
ans[1] = right + 1;
return ans;
}
}