题目描述
统计一个数字在排序数组中出现的次数。
用两次二分查找,先找最前面的那个数字,再找最后面的那个数字,两者中间的个数即为结果。
public class Solution {
public int GetNumberOfK(int [] array , int k) {
if(array==null||array.length==0) return 0;
int low=0;
int high=array.length-1;
int mid=-1;
int left=0;
int right=0;
while(low<=high){
mid=(low+high)/2;
if(array[mid]==k){
if((mid>0&&array[mid-1]!=k)||mid==0){
left=mid;
break;
}else{
high=mid-1;
}
}else if(array[mid]>k){
high=mid-1;
}else{
low=mid+1;
}
}
if(high<low) return 0;
low=0;
high=array.length-1;
while(low<=high){
mid=(low+high)/2;
if(array[mid]==k){
if((mid<array.length-1&&array[mid+1]!=k)||mid==array.length-1){
right=mid;
break;
}else{
low=mid+1;
}
}else if(array[mid]>k){
high=mid-1;
}else{
low=mid+1;
}
}
return right-left+1;
}
}
本文介绍了一种使用两次二分查找的方法来确定一个给定数字在已排序数组中出现的次数。首先找到该数字首次出现的位置,然后找到最后一次出现的位置,两者之间的距离即为所求。
602

被折叠的 条评论
为什么被折叠?



