LeetCode 0167. Two Sum II - Input array is sorted two numbers II - Easy input sorted array [] [] [Python double pointer]
topic
Given an array of integers that is already sorted in ascending order, find two numbers such that they add up to a specific target number.
The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2.
Note:
- Your returned answers (both index1 and index2) are not zero-based.
- You may assume that each input would have exactly one solution and you may not use the same element twice.
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.
translation
Given an ordered array is sorted in ascending order according to find the two numbers such that their sum is equal to the sum of the target number.
Function should return the two index values and index1 index2, which must be less than index1 index2.
Description:
-
Return values of the index (index1, index2 and) is not zero.
-
You can assume that each input corresponding to only the only answer, but you can not reuse the same elements.
Example:
输入: numbers = [2, 7, 11, 15], target = 9
输出: [1,2]
解释: 2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。
Thinking
Double pointer
left pointer points to the end of the head, right pointer points to the head from the tail, and then determines whether the two numbers is equal to target.
Time complexity : O (n)
Python code
class Solution(object):
def twoSum(self, numbers, target):
"""
:type numbers: List[int]
:type target: int
:rtype: List[int]
"""
left = 0 # 从头指向尾
right = len(numbers) - 1 # 从尾指向头
while left < right:
if numbers[left] + numbers[right] == target:
return [left + 1, right + 1]
elif numbers[left] + numbers[right] > target:
right -= 1
else:
left += 1
return []