题目描述:
统计一个数字在升序数组中出现的次数。
题解:
题解一:
暴力求解,遍历数组,找出k的个数。
public int GetNumberOfK(int [] array , int k) {
int count = 0;
for(int i = 0;i < array.length;i++){
if(array[i] == k){
count++;
}
}
return count;
}
题解二:
(1)二分查找,找到某一个k,并记录下标。
(2)根据此下标向前向后遍历,直至不等于k。
public int GetNumberOfK(int [] array , int k) {
int count = 0;
int index = -1;
int left = 0;
int right = array.length-1;
int mid = -1;
while(left < right) {
mid = (left + right)/2;
if (array[mid] > k) {
right = mid - 1;
}else if(array[mid] < k){
left = mid + 1;
}else{
count++;
index = mid;
break;
}
}
for(int i = index -1;i >= 0;i--){
if(array[i] == k){
count++;
}else{
break;
}
}
for(int j = index + 1;j < array.length;j++){
if(array[j] == k){
count++;
}else{
break;
}
}
return count;
}