如果最后一次判断条件为x > t -> right = mid - 1 -> [left, right]
则没问题,正常结束
如果最后一次判断条件为x <= t -> left = mid -> [left, right]
则会一直left = mid,陷入死循环
求中点方式为什么是left + (right - left + 1) / 2?
偶数时:求的是右端点
如果最后一次判断条件为x > t -> right = mid - 1 -> [left, right]
则没问题,正常结束
如果最后一次判断条件为x <= t -> left = mid -> [left, right]
则会一直left = mid,陷入死循环
3.代码实现
vector<int>searchRange(vector<int>& nums,int target){// 处理边界情况if(nums.size()==0){return{-1,-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;}}int begin =0;if(nums[left]== target){
begin = left;// 标记左端点}else{return{-1,-1};}// 二分右端点// 这里其实left可以不做处理,算一个小优化
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};}
intMySqrt(int x){// 处理边界情况if(x <1){return0;}int left =1, right = x;while(left < right){longlong mid = left +(right - left +1)/2;if(mid * mid <= x){
left = mid;}else{
right = mid -1;}}return left;}