给定一个已经按升序排好的整数有序数组,找到该数组中累加等于目标值的两个整数
函数twoSum返回两个整数在数组中的索引,且第一个索引Index1应该小于第二个索引Index2
注意:
返回的结果(包括index1和index2)都是从1开始的
你可以认为每一个输入只对应唯一一个正确答案,同一个元素不能使用两次
Example:
Input: numbers = [2,7,11,15], target = 9 Output: [1,2] Explanation: The sum of 2 and 7 is 9. Therefore index1 = 1, index2 = 2.
1:解法与"两数之和"相同,借用dic{}字典完成,时间复杂度O(n)
def twoSum(self, numbers, target):
"""
:type numbers: List[int]
:type target: int
:rtype: List[int]
"""
numDic = {}
for i in range(len(numbers)):
if not numDic.has_key(numbers[i]):
numDic[target-numbers[i]]=i
else:
return [numDic.get(numbers[i])+1, i+1]
2:由于整数数组是升序排列,且必有满足目标值的解,所以可以从数组头尾数值的和来逼近(参考他人代码)
def twoSum(self, numbers, target):
"""
:type numbers: List[int]
:type target: int
:rtype: List[int]
"""
left = 0
right = len(numbers)-1
while left<right:
sum = numbers[left]+numbers[right]
if sum==target:
return [left+1, right+1]
elif sum>target:
right -= 1
else:
left += 1
算法题来自:https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted/description/