Two Sum II - Input Array Is Sorted
LeetCode 167 | Difficulty: Mediumβ
MediumProblem Descriptionβ
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[index~1~] and numbers[index~2~] where 1 <= index~1~ < index~2~ <= numbers.length.
Return* the indices of the two numbers, index~1~ and index~2~, added by one as an integer array [index~1~, index~2~] of length 2.*
The tests are generated such that there is exactly one solution. You may not use the same element twice.
Your solution must use only constant extra space.
Example 1:
Input: numbers = [2,7,11,15], target = 9
Output: [1,2]
Explanation: The sum of 2 and 7 is 9. Therefore, index~1~ = 1, index~2~ = 2. We return [1, 2].
Example 2:
Input: numbers = [2,3,4], target = 6
Output: [1,3]
Explanation: The sum of 2 and 4 is 6. Therefore index~1~ = 1, index~2~ = 3. We return [1, 3].
Example 3:
Input: numbers = [-1,0], target = -1
Output: [1,2]
Explanation: The sum of -1 and 0 is -1. Therefore index~1~ = 1, index~2~ = 2. We return [1, 2].
Constraints:
-
2 <= numbers.length <= 3 * 10^4 -
-1000 <= numbers[i] <= 1000 -
numbersis sorted in non-decreasing order. -
-1000 <= target <= 1000 -
The tests are generated such that there is exactly one solution.
Topics: Array, Two Pointers, Binary Search
Approachβ
Two Pointersβ
Use two pointers to traverse the array, reducing the search space at each step. This avoids the need for nested loops, bringing complexity from O(nΒ²) to O(n) or O(n log n) if sorting is involved.
Array is sorted or can be sorted, and you need to find pairs/triplets that satisfy a condition.