34. Search for a Range

来源:互联网 发布:淘宝自粘墙纸有甲醛吗 编辑:程序博客网 时间:2024/05/22 17:05

问题:

给定一个按照升序排列的整数数组,找出被给定目标值的开始和结束位置。算法时间复杂度要求O(logn)。如果目标值不存在则返回[ -1, -1 ]。
例子:

Input: nums = [5,7,7,8,8,10],target = 8Output: [3,4]

解题思路:
由于时间复杂度要求为O(logn),这里考虑使用二分法。先找出左边界,然后在左边界的基础上,找出右边界。


实现:

vector<int> searchRange(vector<int>& nums, int target){    vector<int> result(2,-1);    int m = 0;    int n = nums.szie() - 1;    if(n == -1)        return result;    while(m < n)    {        int mid = (m + n) / 2;        if(target > nums[mid])            m = mid + 1;        else            n = mid;    }    if(nums[m] != target)        return result;    else        result[0] = m;    n = nums.size() - 1;    while(m < n)    {        int mid = (m + n) / 2;        if(target < nums[mid])            n = mid - 1;        else            m = mid;    }    result[1] = n;    return result;}
原创粉丝点击