[leetcode]Two Sum II – Input array is sorted

此题我用的是二分查找,毕竟有序嘛。其实更好的解法,应该是一个数组,left right下标往里移动查找,这个题我曾经应该在《编程之美》或者《剑指Offer》上看到过。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Solution {
public:
    vector<int> result;
    
    void bSearch(vector<int>& numbers, int start, int end, int find) {
        if (start > end) return;
        int middle = (start + end) / 2;
        if (find == numbers[middle]) {
            result.push_back(middle + 1);
            return;
        } else if (find > numbers[middle]) {
            bSearch(numbers, middle + 1, end, find);
        } else {
            bSearch(numbers, start, middle - 1, find);
        }
    }
    
    vector<int> twoSum(vector<int>& numbers, int target) {
        for (int i = 0; i < numbers.size(); i++) {
            int find = target - numbers[i];
            result.push_back(i + 1);
            bSearch(numbers, i + 1, numbers.size(), find);
            if (result.size() == 2) {
                return result;
            }
            result.clear();
        }
        return result;
    }
};
Licensed under CC BY-NC-SA 4.0