题解 | #数字在升序数组中出现的次数#
数字在升序数组中出现的次数
http://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2
/*
二分搜索到后,分别向两边扩展。看有多少相等的
*/
public class Solution {
public int GetNumberOfK(int [] array , int k) {
if(array.length==0) return 0;
int low=0,high=array.length-1;
int count=0;
while(low<=high){
int mid = low+(high-low)/2;
if(array[mid]<k) low=mid+1;
else if (array[mid]>k) high = mid-1;
else {
int a = mid-1; // 当前元素不要重复计算
int b = mid;
// 向前面扩展
while(a>=0 && array[a]==k){
count++;
a--;
}
// 向后面扩展
while(b<array.length && array[b]==k){
count++;
b++;
}
break; // 因为扩展完所有相等的元素就肯定都找到了,所以没有必要再进入下一次while
}
}
return count;
}
} 