您的位置:首页 > Web前端

剑指offer题解 数字在排序数组中出现的次数

2016-06-27 10:46 465 查看
题目描述

统计一个数字在排序数组中出现的次数。

用两次二分查找,先找最前面的那个数字,再找最后面的那个数字,两者中间的个数即为结果。

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: