leetcode-167-Input array is sorted

来源:互联网 发布:ubuntu grub引导修复 编辑:程序博客网 时间:2024/05/21 06:21

问题

题目:[leetcode-167]

思路

朴素的思路就是两层循环。但是TLE.

代码(TLE)

class Solution {public:    vector<int> twoSum(vector<int>& numbers, int target) {        int sz = numbers.size();        std::vector<int> ret;        for( int i = 0; i < sz - 1; ++i ){            for( int j = i + 1; j < sz; ++j ){                if( numbers[i] + numbers[j] == target )                {                    ret.push_back(i+1);                    ret.push_back(j+1);                    return ret;                }            }        }        return ret;    }};

思路1

看见有序序列,敏感一点就能想到二分查找。这么做复杂度就是O(nlogn).

代码1

class Solution {public:    vector<int> twoSum(vector<int>& numbers, int target) {        int sz = numbers.size();        vector<int> ret;        if(!sz) return ret;        for( int i = 0; i < sz - 1; ++i ){            int key = target - numbers[i];            int j = biSearch( numbers, i + 1, sz - 1, key );            if(-1 == j)                continue;            ret.push_back(i+1);            ret.push_back(j+1);            return ret;        }        return ret;    }private:    int biSearch( const vector<int>& arr, int low, int high, int key ){        while(low <= high){            int mid = (low+high)/2;            if(arr[mid] == key)                return mid;            else if( key < arr[mid] )                high = mid - 1;            else                low = mid + 1;        }        return -1;    }};
0 0
原创粉丝点击