Two Sum II – Input Array Is Sorted
Problem Statement
Given a sorted array of integers and a target sum, find two numbers such that they add up to the target. Return their 1-based indices. This is an easy-level problem solved using two pointers.
Example
Input: numbers = [2, 7, 11, 15], target = 9
Output: [1, 2] (2 + 7 = 9, indices are 1-based)
Code
Java
Python
JavaScript
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[] {}; // No solution found } }
def two_sum(numbers, target): left, right = 0, len(numbers) - 1 while left < right: curr_sum = numbers[left] + numbers[right] if curr_sum == target: return [left + 1, right + 1] elif curr_sum < target: left += 1 else: right -= 1 return [] # No solution found # Example usage print(two_sum([2, 7, 11, 15], 9)) # [1, 2]
function twoSum(numbers, target) { let left = 0, right = numbers.length - 1; while (left < right) { let sum = numbers[left] + numbers[right]; if (sum === target) { return [left + 1, right + 1]; } else if (sum < target) { left++; } else { right--; } } return []; // No solution found } // Example usage console.log(twoSum([2, 7, 11, 15], 9)); // [1, 2]
Explanation
- Use two pointers: left at the start, right at the end.
- Calculate the sum of elements at both pointers.
- If sum equals target, return 1-based indices.
- If sum is less, move left pointer up; if more, move right pointer down.
Note
Time complexity is O(n) due to a single pass with two pointers. Space complexity is O(1).