使用二分查找
此题的关键在于找到左端点和右端点
找中点
两种操作
左端点用第一个方式
右端点用第二种,避免死循环
二分模板
class Solution {
public:vector<int> searchRange(vector<int>& nums, int target) {if(nums.size()==0) return{-1,-1};int begin=0;//1.二分左端点int left=0, right = nums.size()-1;while(left<right){int mid = left+(right-left)/2;if(nums[mid]<target) left=mid+1;else right=mid;}//判断是否有结果if(nums[left]!=target) return{-1,-1};else begin = left;//2.二分右端点left=0, right = nums.size()-1;while(left<right){int mid = left + (right-left+1)/2;if(nums[mid]<=target) left=mid;else right=mid-1;}//判断是否有结果return {begin ,right};}