一、题目描述
给你一个下标从
1
开始的整数数组
numbers
,该数组已按
非递减顺序排列
,请你从数组中找出满足相加之和等于目标数
target
的两个数。如果设这两个数分别是
numbers[index1]
和
numbers[index2]
,则
1 <= index1 < index2 <= numbers.length
。
以长度为
2
的整数数组
[index1, index2]
的形式返回这两个整数的下标
index1
和
index2
。
你可以假设每个输入
只对应唯一的答案
,而且你
不可以
重复使用相同的元素。
你所设计的解决方案必须只使用常量级的额外空间。
示例 1
输入:numbers = [2,7,11,15], target = 9
输出:[1,2]
解释:2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。返回 [1, 2] 。
示例 2
输入:numbers = [2,3,4], target = 6
输出:[1,3]
解释:2 与 4 之和等于目标数 6 。因此 index1 = 1, index2 = 3 。返回 [1, 3] 。
示例 3
输入:numbers = [-1,0], target = -1
输出:[1,2]
解释:-1 与 0 之和等于目标数 -1 。因此 index1 = 1, index2 = 2 。返回 [1, 2] 。
提示:
2 <= numbers.length <= 3 * 10^4
-1000 <= numbers[i] <= 1000
numbers 按 非递减顺序 排列
-1000 <= target <= 1000
仅存在一个有效答案
二、代码
代码如下:
class Solution:
def twoSum(self, numbers: List[int], target: int) -> List[int]:
result_index = []
for i in range(len(numbers)):
if target - numbers[i] in numbers and numbers.index(target - numbers[i]) != i:
print("index1:",i,numbers[i])
index2 = numbers.index(target - numbers[i])
print("index2:",index2)
result_index.append(i+1)
result_index.append(index2+1)
print(sorted(result_index))
return sorted(result_index)
else:
continue
三、解题思路
本题考验对数组的遍历和查询。具体的解题思路是遍历数组,当前的元素为
numbers[i]
,如果能够在
numbers
中找到另外一个
非相同坐标
且数值等于
target - numbers[i]
的元素,则说明找到了结果,返回对应的下标即可。
ps:由于题意中给出要求:“你可以假设每个输入
只对应唯一的答案
,而且你
不可以
重复使用相同的元素。” 说明不能使用重复的元素进行组合(例如:
target=6,numbers=[2,3,4]
中,不能使用2次“
3
”来作为答案),所以上文中才需要要求“非相同坐标”。