题目描述
统计一个数字在排序数组中出现的次数。
题解
数组有序,采用二分查找法。
首先找到数字第一个出现的位置,然后找数字最后出现的位置,即可得出数字的个数。
在找数字最后出现的位置时,最后注意临界条件的判断,谨防死循环。
public class Solution {
public int GetNumberOfK(int [] a , int k) {
if(a == null || a.length == 0)
return 0;
int leftIndex = getFirstIndex(a, k, 0, a.length - 1);
if(leftIndex == -1)
return 0;
int rightIndex = getLastIndex(a, k, 0, a.length - 1);
return rightIndex - leftIndex + 1;
}
public int getFirstIndex(int[] a, int k, int low, int high) {
int leftIndex = -1;
int mid;
while(low <= high) {
mid = (low + high)/2;
if(a[mid] > k)
high = mid - 1;
else if(a[mid] < k)
low = mid + 1;
else {
if(mid == low) {
leftIndex = mid;
break;
} else {
high = mid;
}
}
}
return leftIndex;
}
public int getLastIndex(int[] a, int k, int low, int high) {
int rightIndex = -1;
int mid;
while(low <= high) {
mid = (low + high)/2;
if(a[mid] > k)
high = mid - 1;
else if(a[mid] < k)
low = mid + 1;
else {
if(mid == low) {
if(a[high] == k)
rightIndex = high;
else
rightIndex = mid;
break;
} else {
low = mid;
}
}
}
return rightIndex;
}
}
这篇博客主要介绍了如何统计一个数字在已排序数组中出现的次数,通过使用二分查找法,首先找到数字首次出现的位置,再确定其最后出现的位置,以此计算数量。在寻找最后位置时,需特别注意避免临界条件导致的死循环。
3940

被折叠的 条评论
为什么被折叠?



