题目描述
统计一个数字在排序数组中出现的次数。
思路
看见有序,第一个想到二分查找。二分找到k的值,然后从这个位置向前向后找。
个人解法
public class Solution {
public int GetNumberOfK(int [] array , int k) {
if(array == null || array.length == 0)
return 0;
int count = 0;
int low = 0, high = array.length - 1, mid = 0;
while(low <= high){
mid = low + (high -low) / 2;
if(array[mid] == k)
break;
else if(array[mid] > k)
high = mid - 1;
else
low = mid + 1;
}
//找到等于k的值的位置
if(low <= high){
//从这个位置向后找
for(int i = mid;i >= 0;i--){
if(array[i] == k)
count++;
else
break;
}
//从这个位置想右找
for(int i = mid + 1;i < array.length;i++){
if(array[i] == k)
count++;
else
break;
}
}
return count;
}
}