统计一个数字在排序数组中出现的次数。
package 剑指offerfrom27题;
import java.util.HashMap;
public class 数组在排序数组中出现的次数 {
public static void main(String[] args) {
// TODO Auto-generated method stub
// int arrar[] = { 1, 2, 3, 3, 3, 3, 4, 5 };
int arrar[] = { 1, 2, 3, 4, 5 };
// int arrar[] = {3,3,3,3,4,5};
System.out.println(GetNumberOfK2(arrar, 5));
}
public int GetNumberOfK(int[] array, int k) {
if (array.length == 0 || array == null) {
return 0;
}
HashMap<Integer, Integer> hashMap = new HashMap<>();
for (int i = 0; i < array.length; i++) {
if (hashMap.containsKey(array[i])) {
int value = hashMap.get(array[i]);
hashMap.put(array[i], value + 1);
} else {
hashMap.put(array[i], 1);
}
}
int number = 0;
if (hashMap.containsKey(k)) {
number = hashMap.get(k);
}
return number;
}
public static int GetNumberOfK2(int[] array, int k) {
if (array.length == 0 || array == null) {
return 0;
}
int low = 0;
int high = array.length - 1;
int mid = (low + high) / 2;
int start = 0;
int end = 0;
/*二分查找找到k的位置*/
while (array[mid] != k) {
if (low==high) {//找不到k的时候
break;
}
if (array[mid] > k) {
high = mid - 1;
}
if (array[mid] < k) {
low = mid + 1;
}
mid = (high + low) / 2;
}
if (array[mid]==k) {
start = mid;
end = mid + 1;
while (start >= 0 &&array[start] == k ) {
start--;
}
while (end < array.length && array[end] == k) {
end++;
}
return end - start -1;
}
return 0;
}
}