题解 | #数字在升序数组中出现的次数#
数字在升序数组中出现的次数
http://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2
二分法 分别找到第一个大于等于k的元素,和第一个小于等于k的元素
public class Solution {
public int GetNumberOfK(int [] array , int k) {
if(array.length==0){
return 0;
}
int len=array.length;
int left=0;
int right=len-1;
int mid=0;
while(left<right){
mid=left+(right-left)/2;
if(array[mid]>=k){
right=mid;
}else if(array[mid]<k){
left=mid+1;
}
}
int i=0;
if(array[left]==k){
i=left;
}else{
return 0;
}
left=0;
right=len-1;
while(left<right){
mid=left+(right-left+1)/2;
if(array[mid]<=k){
left=mid;
}else if(array[mid]>k){
right=mid-1;
}
}
int j=0;
if(array[left]==k){
j=left;
}else{
return 0;
}
return j-i+1;
}
}