167. Two Sum II - Input Array Is Sorted
Given a 1-indexed array of integers numbers that is already sorted in non-decreasing order, find two numbers such that they add up to a specific target number. Let these two numbers be numbers[index1] and numbers[index2] where 1 <= index1 < index2 <= numbers.length
ArrayExample 1:
- Input:
numbers = [2,7,11,15], target = 9 - Output:
[1,2] - Explanation: The sum of
2and7is9. Therefore,index1 = 1,index2 = 2. We return[1, 2].
Example 2:
- Input:
numbers = [2,3,4], target = 6 - Output:
[1,3] - Explanation: The sum of
2and4is6. Thereforeindex1 = 1,index2 = 3. We return[1, 3].
Example 3:
- Input:
numbers = [-1,0], target = -1 - Output:
[1,2] - Explanation: The sum of
-1and0is-1. Thereforeindex1 = 1,index2 = 2. We return[1, 2].
Constraints:
2 <= numbers.length <= 3 * 10^4-1000 <= numbers[i] <= 1000numbersis sorted in non-decreasing order.-1000 <= target <= 1000- The tests are generated such that there is exactly one solution.
Approach
Solution
class Solution:
def twoSum(self, numbers: List[int], target: int) -> List[int]:
i = 0
j = len(numbers) - 1
while i < j:
c = numbers[i] + numbers[j]
if c == target:
return [i + 1, j + 1]
elif c < target:
i+=1
else:
j-=1
return []