mirror of
https://github.com/arkorty/LeetCode.git
synced 2026-03-17 16:51:46 +00:00
37 lines
1019 B
C++
37 lines
1019 B
C++
#include <vector>
|
|
|
|
class Solution {
|
|
public:
|
|
std::vector<int> twoSum(std::vector<int> &numbers, int target) {
|
|
int j = -1;
|
|
for (int i = 0; i < numbers.size(); ++i) {
|
|
int otherhalf = target - numbers[i];
|
|
|
|
j = binarySearch(numbers, 0, numbers.size() - 1, otherhalf);
|
|
|
|
if (j != -1 && i != j) {
|
|
if (i < j) {
|
|
return {i + 1, j + 1};
|
|
} else {
|
|
return {j + 1, i + 1};
|
|
}
|
|
}
|
|
}
|
|
|
|
return {-1, -1};
|
|
}
|
|
|
|
int binarySearch(std::vector<int> &numbers, int start, int end, int key) {
|
|
if (start <= end) {
|
|
int middle = (start + end) / 2;
|
|
if (numbers[middle] == key)
|
|
return middle;
|
|
else if (numbers[middle] > key)
|
|
return binarySearch(numbers, start, middle - 1, key);
|
|
else
|
|
return binarySearch(numbers, middle + 1, end, key);
|
|
}
|
|
return -1;
|
|
}
|
|
};
|