Binary Search:167. Two Sum II

来源:互联网 发布:石家庄优化 编辑:程序博客网 时间:2024/06/16 14:53

这道题的意思是,给一个排好序的数组,和一个目标值target, 求数组中的两个数,使得他们相加等于target,返回两个数的下标。

这道题一开始没有加if(i > 0 && numbers[i] == numbers[i-1]) continue;这句话,超时了。原因是有的测试用例是{0,0,0,....,0,9,9,9....,9}target是5.

class Solution {public:    vector<int> twoSum(vector<int>& numbers, int target) {        int num1 = 0, num2 = 0;        for(int i = 0; i < numbers.size(); ++i)        {            if(numbers[i] > target) break;            else                num1 = i;            if(i > 0 && numbers[i] == numbers[i-1])  continue;            for(int j = i+1; j < numbers.size(); ++j)            {                if(numbers[j] + numbers[num1] == target)                {                    num2 = j;                    return {num1+1, num2+1};                }            }        }        return {};    }};
看到大神的写法,设前后两个指针,向中间移动,把两个指针处的值相加,如果和大于target,左边指针回去。如果和小于target,右边指针回去。

class Solution {public:    vector<int> twoSum(vector<int>& numbers, int target) {        int l = 0, r = numbers.size() - 1;        while (l < r) {            int sum = numbers[l] + numbers[r];            if (sum == target) return {l + 1, r + 1};            else if (sum < target) ++l;            else --r;        }        return {};    }};


原创粉丝点击