167. Two Sum II - Input Array Is Sorted ๐
Last updated
Was this helpful?
Last updated
Was this helpful?
Difficulty: Medium
- Tags: Array
, Two Pointers
, Binary Search
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
.
Return the indices of the two numbers, index1
and index2
, added by one as an integer array [index1, index2]
of length 2.
Your solution must use only constant extra space.
๐น Example 1:
Input:
Output:
๐น Example 2:
Input:
Output:
๐น Example 3:
Input:
Output:
2 <= numbers.length <= 3 * 10^4
-1000 <= numbers[i] <= 1000
numbers
is sorted in non-decreasing order.
-1000 <= target <= 1000
The tests are generated such that there is exactly one solution.
Given that numbers
is sorted, we can use the Two-Pointer Technique:
Initialize Two Pointers: Place one pointer at the start (left = 0
) and the other at the end (right = numbers.length - 1
) of the array.
Sum and Compare: Calculate the sum of the elements at left
and right
.
If the sum equals target
, return [left + 1, right + 1]
.
If the sum is less than target
, increment left
to increase the sum.
If the sum is greater than target
, decrement right
to decrease the sum.
Repeat until the target is found.
O(n), where n
is the length of numbers
. We scan the array once with two pointers.
O(1), since we only use two pointers and no additional data structures.
You can find the full solution .