> For the complete documentation index, see [llms.txt](https://www.vjssn.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://www.vjssn.dev/practice/24-06-30/lc167-two-sum-ii-input-array-is-sorted.md).

# LC167 - Two Sum II, Input Array is Sorted

## Problem

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.*

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

**Input:** numbers = `[2,7,11,15]`, target = 9

**Output:** `[1,2]`

**Explanation:** The sum of 2 and 7 is 9. Therefore, index1 = 1, index2 = 2. We return `[1, 2]`.

## Solution

Use a binary search to find the two sum. Time complexity is $$O(n)$$ with no extra space used.

```python
def twoSum(self, numbers: List[int], target: int) -> List[int]:
	left = 0
	right = len(numbers) - 1

	while left < right:
		twoSum = numbers[left] + numbers[right]
		if twoSum == target:
			return [left+1, right+1]
		if twoSum < target:
			left += 1
		else:
			right -= 1
	
```
