题目描述
给定一个已按照升序排列的有序数组,找到两个数使得它们相加之和等于目标数。
函数应该返回这两个下标值index1和index2,其中index1必须小于index2。
说明:
- 返回的下标值(index1和index2)不是从零开始的。
- 你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。
样例
样例 1:
输入: numbers = [2, 7, 11, 15], target = 9
输出: [1,2]
解释: 2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted
解题思路及代码
题目中明确描述了序列是升序且只有一组答案,因此,我们只需要从头尾开始遍历,如果正好等于给定目标值,直接返回结果;如果大于给定的目标值,说明我们需要更小的值,所以将右侧的索引自减;如果大于给定的目标值,说明我们需要更大的值,所以将左侧的索引自增。具体的代码实现如下:
Python版本
class Solution:
def twoSum(self, numbers: List[int], target: int) -> List[int]:
i, j = 0, len(numbers) - 1
while i total = numbers[i] + numbers[j]
if total == target:
return [i+1, j+1]
elif total > target:
j -= 1
else:
i += 1
return [-1,-1]
Java版本
class Solution {
public int[] twoSum(int[] numbers, int target) {
int i = 0;
int j = numbers.length - 1;
while(i int total = numbers[i] + numbers[j];
if(total == target){
return new int[]{i+1, j+1};
}
else if(total > target){
j--;
}
else{
i++;
}
}
return new int[]{-1, -1};
}
}
喜欢的话点个在看吧?