1. 167

two-sum-ii-input-array-is-sorted/


2. 算法

  • 双指针:O(n)

我们只需要两个指针,一个指向开头,一个指向末尾,然后向中间遍历,如果指向的两个数相加正好等于target的话,直接返回两个指针的位置即可,若小于target,左指针右移一位,若大于target,右指针左移一位,以此类推直至两个指针相遇停止,参见代码如下:


3. 代码

// O(n)
class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {
        int n=numbers.size();
        vector<int>  result;
        if(n<=1)  return result;
        int start=0,end=n-1;
        while(start<end){
            if(numbers[start]+numbers[end]<target)
                ++start;
            else if(numbers[start]+numbers[end]>target)
                --end;
            else{
                result.push_back(start+1);
                result.push_back(end+1);
                break;
            }
        }
        return result;
    }
};

results matching ""

    No results matching ""