leetcode 34 在排序的数组中查找元素的第一个和最后一个位置 (有序数组中查找数字的开始和结束下标)

//Time:(O(log(n))),Space:O(1)
//此题为二分查找的变形题目,需要先学会二分查找法
class Solution 
{
public:
    int binarySearchLast(vector<int>& nums,int target)
    {
        int begin=0;
        int end=nums.size()-1;

        while(begin<=end)
        {
             int mid=begin+(end-begin)/2;

             if(nums[mid]>target)
             {
                 end=mid-1;
             }
             else
             {
                 begin=mid+1;
             }
        }

        return end;
    }

    vector<int> searchRange(vector<int>& nums, int target) 
    {
        vector<int> v(2);
        v[0]=-1;
        v[1]=-1;
        
        if(nums.size()>0)
        {
            int end=binarySearchLast(nums,target);
            int start=binarySearchLast(nums,target-1)+1;

            if(start>=0&&start<=end&&end<nums.size())
            {
                v[0]=start;
                v[1]=end;
            }
        }

        return v;
    }
};

 

posted @ 2019-12-31 21:33  repinkply  阅读(4)  评论(0)    收藏  举报