题目描述:统计一个数字在排序数组中出现的次数。
题目链接:剑指offer53
思路:使用二分法模版(先看我的二分法模版那篇文章再来做着题就很简单),先找到这个数字第一次出现的位置,在找到这个数字最后一次出现的位置
public class Solution {
public int GetNumberOfK(int [] array , int k) {
if(array == null || array.length == 0){
return 0;
}
int first = helper1(array , k);
int last = helper2(array , k);
if(first == -1 || last == -1){
return 0;
}
return last - first + 1;
}
//helper1找到第一次出现此数字的位置
int helper1(int[] array , int k){
int l = 0;
int r = array.length - 1;
while(l + 1 < r){
int mid = l + (r - l)/2;
if(array[mid] == k){
r = mid;
}else if(array[mid] > k){
r = mid;
}else{
l = mid;
}
}
if(array[l] == k){
return l;
}
if(array[r] == k){
return r;
}
return -1;
}
//helper2找到最后一次出现此数字的位置
int helper2(int[] array , int k){
int l = 0;
int r = array.length - 1;
while(l + 1 < r){
int mid = l + (r - l)/2;
if(array[mid] == k){
l = mid;
}else if(array[mid] > k){
r = mid - 1;
}else{
l = mid + 1;
}
}
if(array[r] == k){
return r;
}
if(array[l] == k){
return l;
}
return -1;
}
}