题解 | #数字在升序数组中出现的次数#
数字在升序数组中出现的次数
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; } }