# Leetcode Two-Sum-II-Input-Array-Is-Sorted #### 2022-07-11 14:54 > ##### Algorithms: > #algorithm #two_pointers > ##### Data structures: > #DS #array > ##### Difficulty: > #coding_problem #difficulty-easy > ##### Additional tags: > #leetcode > ##### Revisions: > N/A ##### Related topics: ```expander tag:#two_pointers ``` - [[Leetcode Intersection-of-Two-Arrays-II]] - [[Leetcode Merge-Sorted-Array]] - [[Leetcode Merge-Two-Sorted-Lists]] - [[Leetcode Move-Zeroes]] - [[Leetcode Squares-of-a-Sorted-Array]] - [[Two pointers approach]] ##### Links: - [Link to problem](https://leetcode.com/problems/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. #### Examples **Example 1:** **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]. **Example 2:** **Input:** numbers = [2,3,4], target = 6 **Output:** [1,3] **Explanation:** The sum of 2 and 4 is 6. Therefore index1 = 1, index2 = 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 index1 = 1, index2 = 2. We return [1, 2]. #### Constraints - `2 <= numbers.length <= 3 * 104` - `-1000 <= numbers[i] <= 1000` - `numbers` is sorted in **non-decreasing order**. - `-1000 <= target <= 1000` - The tests are generated such that there is **exactly one solution**. ### Thoughts > [!summary] > This is a #two_pointers problem. decrement the right pointer makes the sum smaller, increment the left pointer makes the sum bigger, and thud we get the answer. ### Solution ```cpp class Solution { public: vector twoSum(vector &numbers, int target) { // Sorted array, use two pointers // remember to subtract 1 int r = numbers.size() - 1; int l = 0; int sum; while (l < r) { sum = numbers[l] + numbers[r]; if (sum < target) { l++; } else if (sum > target) { r--; } else { return {l + 1, r + 1}; } } // Shouldn't return this, since there is a solution return {0, 0}; } }; ```