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
Was this helpful?