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:
[1,3]🔹 Example 3:
Input:
numbers = [-1,0]
target = -1Output:
[1,2]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
public class Solution {
public int[] twoSum(int[] numbers, int target) {
int left = 0, right = numbers.length - 1;
while (left < right) {
int sum = numbers[left] + numbers[right];
if (sum == target) {
return new int[]{left + 1, right + 1};
} else if (sum < target) {
left++;
} else {
right--;
}
}
return new int[0]; // This should never be reached due to problem constraints.
}
}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?