数字在排序数组中出现的次数
数字在升序数组中出现的次数
http://www.nowcoder.com/questionTerminal/70610bf967994b22bb1c26f9ae901fa2
思路分析:
1.通过二分查找,先查询出目标值的左边界,如果目标值存在,则左边界是第一个目标值所出现的位置 否则是第一个大于目标值的位置
2.再找出右边界,第一个大于目标值的位置
3.右边界 - 左边界 即为目标值出现的次数
public class Solution {
public int GetNumberOfK(int [] array , int k) {
int left = 0; //左边界
int right = 0; //右边界
int l = 0, r = array.length;
//寻找左边界 如果存在目标值 则指向第一个目标值 如果不存在则指向大于目标值的第一个值
while(l < r){
int mid = l + (r-l)/2;
if(array[mid] < k){ //中间值小于k时 目标值就在mid右边
l = mid + 1; //只有mid + 1才可能出现与目标值相等的情况
}else{
r = mid; //中间值大于等于k时 目标值就在mid左边
}
}
left = l;
l = 0;
r = array.length;
//寻找右边界 找到大于目标值的第一个值
while(l<r){
int mid = l + (r-l)/2;
if(array[mid] <= k){ //中间值小于等于目标值 则目标值在其右边
l = mid + 1;
}else{
r = mid;
}
}
right = l;
return right - left;
}
}
SHEIN希音公司福利 370人发布
查看26道真题和解析