<34>——Search for a Range

来源:互联网 发布:比亚迪和特斯拉知乎 编辑:程序博客网 时间:2024/06/01 08:37

34、Search for a Range

搜索区间

给定一个包含 n 个整数的排序数组,找出给定目标值 target 的起始和结束位置。

如果目标值不在数组中,则返回[-1, -1]

样例

给出[5, 7, 7, 8, 8, 10]和目标值target=8,

返回[3, 4]

分析:

先用二分查找找出第一个target,然后往后遍历查找最后一个target。

代码:

class Solution {public:    vector<int> searchRange(vector<int>& nums, int target) {        vector<int> res(2,-1);        if(nums.size()<1)return res;        int lo=0,hi=nums.size()-1;        while(lo<hi)        {            int mid=lo+(hi-lo)/2;            if(nums[mid]<target)lo=mid+1;            else hi=mid;        }        if(nums[lo]!=target)return res;        while(hi+1<nums.size()&&nums[hi+1]==target)hi++;        res[0]=lo;        res[1]=hi;        return res;    }};