1.数字在排序数组中出现的次数
【题目】
统计一个数字在排序数组中出现的次数。
【代码】
public int GetNumberOfK(int [] array , int k) {
if (array.length==0 || array==null) return 0;
int i,n,count;
n = array.length;
count = 0;
for (i=0; i<n; i++) {
if (array[i] == k) count++;
}
return count;
}
public int high(int[] a, int k) {
int start,end,mid;
start = 0;
end = a.length-1;
while (start <= end) {
mid = (start + end) >> 1;
if (a[mid] <= k) {
start = mid + 1;
} else {
end = mid - 1;
}
}
return end;
}
public int low(int[] a, int k) {
int start,end,mid;
start = 0;
end = a.length-1;
while (start <= end) {
mid = (start + end) >> 1;
if (a[mid] >= k) {
end = mid - 1;
} else {
start = mid + 1;
}
}
return start;
}
【思考】
由于数组是一个排序过的数组,所以可以用二分查找法,定位 k 的第一次出现位置和最后一次出现位置,时间复杂度为O(logN)O(logN)
二分的前提:有序(一提到有序,必须立马想到二分!)