167. Two Sum II - Input Array Is Sorted ๐
Difficulty: Medium
- Tags: Array
, Two Pointers
, Binary Search
Problem Statement ๐
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.
Examples ๐
๐น Example 1:
Input:
Output:
๐น Example 2:
Input:
Output:
๐น Example 3:
Input:
Output:
Constraints โ๏ธ
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.
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
andright
.If the sum equals
target
, return[left + 1, right + 1]
.If the sum is less than
target
, incrementleft
to increase the sum.If the sum is greater than
target
, decrementright
to decrease the sum.
Repeat until the target is found.
Java Solution
Time Complexity โณ
O(n), where
n
is the length ofnumbers
. We scan the array once with two pointers.
Space Complexity ๐พ
O(1), since we only use two pointers and no additional data structures.
You can find the full solution here.
Last updated