(一)剑指Offer53-I. 在排序数组中查找数字I
基本思想:
1.在排序数组中查找数字,想到了二分搜索方法。由于需要找到所有的该数字,我们想到二分搜索的变形中,有一个查找最左侧的该数字和最右侧的该数字,我们只要找到边界位置,然后向另一方向找就行了。
class Solution {
public int search(int[] nums, int target) {
if(nums.length ==0){
return 0;
}
//我们希望找到最左侧的target位置
//右边界为虚边界
int left = 0, right = nums.length;
while(left < right){
int mid = left + (right-left)/2;
if(nums[mid] == target){
right = mid;
}else if(nums[mid] > target){
right = mid;
}else if (nums[mid] < target){
left = mid+1;
}
}
if(left >= nums.length ||nums[left] != target){
//注意特殊情况:left >= nums.length
return 0;
}else{
int res = 0;
for(int i = left; i < nums.length;i++){
if(nums[i] == target){
res++;
}else{
break;
}
}
return res;
}
}
}
```![在这里插入图片描述](https://img-blog.csdnimg.cn/20210129163409803.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDcyODIzOA==,size_16,color_FFFFFF,t_70)