力扣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 };

 

posted on 2025-03-03 16:34  Coder何  阅读(5)  评论(0)    收藏  举报