在排序数组中查找元素的第一个和最后一个位置
- 思路(默认已经排序):
- 排除特殊情况,如数字超过最右或最左,数组为空
- 进行二分查找,找到了值,就以该值为中心,向左右两边扩散,找到第一个位置和最后一个位置。
- 找不到就跳出循环,返回{-1.-1};
- 细节:
//两种方式是等同的,但第一种不会越界 mid=(r-l)/2+l; mid=(l+r)/2; //while终止条件 while(l<=r) //相当于[l+r,r]才会停止,此时区间没有数字 //如果是l<r,则区间中还存在l=r的时候 //如果是单纯搜索最左端的数字 //遇到数字不返回,缩小右侧边界 if(nums[mid]==targe){ r=mid-1; } //如果是单纯搜索最右端的数字 //遇到数字不返回,缩小左侧边界 if(nums[mid]==targe){ l=mid+1; }