34. Find First and Last Position of Element in Sorted Array 寻找排序数组目标的开始和结束

34. Find First and Last Position of Element in Sorted Array 寻找排序数组目标的开始和结束

解法:二分查找 关键在于如何定位左端点与右端点

vector<int> searchRange(vector<int>& nums, int target) {
    int start=0;
    int end=nums.size()-1;
    vector<int> res(2, -1);
    if (end<0) return res;

	// 大于等于的情况尽量移动 end,惰性移动start
    while(start < end) {
        int mid=(start+end)>>1;
        if (nums[mid]<target) start=mid+1;
        else end=mid;
    }

    if (nums[start]!=target) return res;
    else res[0]=start;

    end=nums.size()-1;
    while(start < end) {
		// 如果start和end位置都等于 target,需要start向右边靠使循环结束
        int mid=((start+end)>>1)+1;
        if (nums[mid]>target) end=mid-1;
        else start=mid;
    }

    res[1]=end;
    return res;
}

#二分