From c7865ef0b44f0b751ac62c2d4019745df8438fe3 Mon Sep 17 00:00:00 2001 From: juan Date: Mon, 11 Jul 2022 21:43:45 +0800 Subject: [PATCH] vault backup: 2022-07-11 21:43:45 --- ...etcode Two-Sum-II-Input-Array-Is-Sorted.md | 104 ++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 OJ notes/pages/Leetcode Two-Sum-II-Input-Array-Is-Sorted.md diff --git a/OJ notes/pages/Leetcode Two-Sum-II-Input-Array-Is-Sorted.md b/OJ notes/pages/Leetcode Two-Sum-II-Input-Array-Is-Sorted.md new file mode 100644 index 0000000..28fc618 --- /dev/null +++ b/OJ notes/pages/Leetcode Two-Sum-II-Input-Array-Is-Sorted.md @@ -0,0 +1,104 @@ +# 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}; + } +}; +```