leetcode 34. Search for a Range

来源:互联网 发布:mac如何强制卸载软件 编辑:程序博客网 时间:2024/05/05 07:53

题目:

Given a sorted array of integers, find the starting and ending position of a given target value.

一个已经排序好的整型数组,给一个目标值(target)。

在这个数组中找到这个目标值的起始下标和结束下标。


Your algorithm's runtime complexity must be in the order of O(log n).

If the target is not found in the array, return [-1, -1].

如果该数组中没有该target值,那么返回[-1,-1]


For example,
Given [5, 7, 7, 8, 8, 10] and target value 8,
return [3, 4].


解答:

题目要求时间复杂度,为O(log n),而且给的数组为有序的。那么首先想到二分查找。

但是此时的二分查找,需要找到target不止一个的下标值。最左端的和最右端的下标。

那么进行两次target查找,第一次找最左端的,第二次找最右端的。


class Solution {public:    vector<int> searchRange(vector<int>& nums, int target)     {        vector<int> ret;        ret.push_back(-1);        ret.push_back(-1);                //nums长度        int len=nums.size();        if(len==0)        return ret;                int low,high,mid;                low=0;        high=len-1;                //通过两次查找,先在nums中找到target的最左边的下标;再找target的最右边的下标;                //找左下标                while(low<=high)        {            mid=(low+high)/2;            if(nums[mid]==target )            {                if(ret[0]==-1 || ret[0]>mid)                {                    ret[0]=mid;                                    }                high=mid-1;            }                        if(nums[mid]<target)            {                low=mid+1;            }                        if(nums[mid]>target)            {                high=mid-1;            }        }                        //找 最右  下标        low=0;        high=len-1;         while(low<=high)        {            mid=(low+high)/2;            if(nums[mid]==target )            {                if(ret[1]==-1 || ret[1]<mid)                ret[1]=mid;                                low=mid+1;            }                        if(nums[mid]<target)            {                low=mid+1;            }                        if(nums[mid]>target)            {                high=mid-1;            }        }                        return ret;    }};



0 0
原创粉丝点击