题目描述
统计一个数字在排序数组中出现的次数。
package array;
//看见排序数组就要想起二分法
public class MyGetNumberOfK {
public int GetNumberOfK(int [] array , int k) {
int left = searchLeft(array, k);
int right = searchRight(array, k);
return right - left + 1;
}
private int searchRight(int[] array, int target) {
int left = 0;
int right = array.length - 1;
while(left <= right) {
int mid = (left + right) / 2;
if(array[mid] == target) {
if (mid == right || array[mid + 1] > target) {
return mid;
} else {
left = mid + 1;
}
}else if(array[mid] > target) {
right = mid -1 ;
}else {
left = mid + 1;
}
}
return -1;
}
public int searchLeft(int[] array,int target) {
int left = 0;
int right = array.length - 1;
while(left <= right) {
int mid = (left + right) / 2;
if(array[mid] == target) {
if (mid == 0 || array[mid - 1] < target) {
return mid;
}else {
right = mid -1;
}
}else if(array[mid] > target) {
right = mid -1 ;
}else {
left = mid + 1;
}
}
return 0;
}
public static void main(String[] args) {
MyGetNumberOfK m = new MyGetNumberOfK();
int[] array = {1,2,2,3,3,3,3,4,4,5};
int k = 3;
System.out.println(m.GetNumberOfK(array, k));
}
}