LeetCode刷题题解笔记 数组(二) --两数之和(输入有序数组)
题目
给定一个已按照升序排列的有序数组,找到两个数使的他们相加之和等于目标数。
函数应该返回这两个下标值index1和index2,其中index1必须小于index2.
说明:
- 返回的下标值不是从零开始的。
- 可以假设每个输入只对应唯一的答案,而且不可以重复使用相同的元素。
实例: - 输入:numbers = [2,7,11,15],target=9
- 输出:[1,2]
- 解释: 2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。
–解题思路
使用双指针
升序排列有序数组,先取第一位numbers[i]和最后一位numbers[j],它们的和sum和target比较
- sum>target,numbers[j]应该左移,j减小。
- sum<target,numbers[i]应该右移,i增加。
- sum=target,返回对应的i,j。
代码
class Solution {
public int[] twoSum(int[] numbers, int target) {
//如果数组为空,返回空
if(numbers.length==0) return null;
//定义左边的下标和右边的下标
int i =0;
int j = numbers.length;
while(i<j){
int sum =numbers[i]+numbers[j];
if(sum==target){
return new int[]{i+1,j+1};
}else if(sum>target){
j--;
}else{
i++;
}
}
return null;
}
}