数字在排序数组中出现的次数
数字在升序数组中出现的次数
http://www.nowcoder.com/questionTerminal/70610bf967994b22bb1c26f9ae901fa2
思路分析:
1.通过二分查找,先查询出目标值的左边界,如果目标值存在,则左边界是第一个目标值所出现的位置 否则是第一个大于目标值的位置
2.再找出右边界,第一个大于目标值的位置
3.右边界 - 左边界 即为目标值出现的次数
public class Solution { public int GetNumberOfK(int [] array , int k) { int left = 0; //左边界 int right = 0; //右边界 int l = 0, r = array.length; //寻找左边界 如果存在目标值 则指向第一个目标值 如果不存在则指向大于目标值的第一个值 while(l < r){ int mid = l + (r-l)/2; if(array[mid] < k){ //中间值小于k时 目标值就在mid右边 l = mid + 1; //只有mid + 1才可能出现与目标值相等的情况 }else{ r = mid; //中间值大于等于k时 目标值就在mid左边 } } left = l; l = 0; r = array.length; //寻找右边界 找到大于目标值的第一个值 while(l<r){ int mid = l + (r-l)/2; if(array[mid] <= k){ //中间值小于等于目标值 则目标值在其右边 l = mid + 1; }else{ r = mid; } } right = l; return right - left; } }