From 64535ad0ac921549085650794c49c2f275f9a302 Mon Sep 17 00:00:00 2001 From: Eat-Swap Date: Thu, 9 Jun 2022 22:46:22 +0800 Subject: [PATCH] add: 220609 [cpp] --- cpp/2206/220609.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 cpp/2206/220609.cpp diff --git a/cpp/2206/220609.cpp b/cpp/2206/220609.cpp new file mode 100644 index 0000000..17be558 --- /dev/null +++ b/cpp/2206/220609.cpp @@ -0,0 +1,23 @@ +#include +#include + +/** + * 167. Two Sum II - Input Array Is Sorted + * 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. + */ + +class Solution { +public: + std::vector twoSum(const std::vector& numbers, int target) { + for (int i = 0; numbers[i] <= target - numbers[i]; ++i) { + int pos = std::lower_bound(numbers.begin() + i + 1, numbers.end(), target - numbers[i]) - numbers.begin(); + if (pos == numbers.size() || numbers[pos] + numbers[i] != target) + continue; + return {i + 1, pos + 1}; + } + return {}; + } +};