力扣167. 两数之和 II - 输入有序数组

每次固定一个数,再二分搜另一个数即可。
1 class Solution { 2 public: 3 vector<int> numbers; 4 int binaryFind(int left, int right, int key) { 5 if (left > right) { 6 return -1; 7 } 8 int mid = (left + right) / 2; 9 if (numbers[mid] == key) { 10 return mid; 11 } 12 if (numbers[mid] > key) { 13 return binaryFind(left, mid - 1, key); 14 } 15 if (numbers[mid] < key) { 16 return binaryFind(mid + 1, right, key); 17 } 18 return -1; 19 } 20 vector<int> twoSum(vector<int>& numbers, int target) { 21 this -> numbers = numbers; 22 for (int i = 0; i < numbers.size(); ++i) { 23 int other_target = target - numbers[i]; 24 int res = binaryFind(0, numbers.size() - 1, other_target); 25 if (res != -1 && res != i) { 26 return {min(i + 1, res + 1), max(i + 1, res + 1)}; 27 } 28 } 29 return {}; 30 } 31 };
浙公网安备 33010602011771号