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:
numbers = [2,7,11,15]
target = 9Output:
[1,2]🔹 Example 2:
Input:
numbers = [2,3,4]
target = 6Output:
🔹 Example 3:
Input:
Output:
Constraints ⚙️
2 <= numbers.length <= 3 * 10^4-1000 <= numbers[i] <= 1000numbersis sorted in non-decreasing order.-1000 <= target <= 1000The 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
leftandright.If the sum equals
target, return[left + 1, right + 1].If the sum is less than
target, incrementleftto increase the sum.If the sum is greater than
target, decrementrightto decrease the sum.
Repeat until the target is found.
Java Solution
Time Complexity ⏳
O(n), where
nis 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?