二分法解决数字在有序数组出现的次数
数字在升序数组中出现的次数
http://www.nowcoder.com/questionTerminal/70610bf967994b22bb1c26f9ae901fa2
其实也可以用暴力解法,但是时间复杂度为O(N)
用二分法后,其实时间复杂度也为 O(NlogN) + O(N) = O(N)
public class Solution {
public int GetNumberOfK(int [] array , int k) {
if(array.length == 0 || k < array[0] || k > array[array.length-1]){
return 0;
}
int left = 0, right = array.length - 1;
int mid = 0;
int count = 0;
while(left <= right){
mid = (left + right) / 2;
if(array[mid] > k){
right = mid-1;
}else if(array[mid] < k){
left = mid + 1;
}else{
count++;
break;
}
}
int pre = mid - 1;
int foll = mid + 1;
//统计这个mid左侧
while(pre >= left){
if(array[pre] == k){
count++;
pre--;
}else{
break;
}
}
//统计这个mid右侧
while(foll <= right){
if(array[foll] == k){
count++;
foll++;
}else{
break;
}
}
return count;
}
}
查看1道真题和解析