您的位置:首页 > 其它

数字在排序数组中出现的次数

2016-06-23 22:39 302 查看

题目

统计一个数字在排序数组中出现的次数。

解题

方法一:暴力

线性遍历

方法二:二分法

分别求出左右边界

public class Solution {
public int GetNumberOfK(int [] array , int k) {
if(array == null|| array.length==0)
return 0;
int low = 0;
int high = array.length -1;
int l = left(array,low,high,k);
if(l ==-1)
return 0;
int r = right(array,l,high,k);

return r-l + 1;
}
// 求左边界
public int left(int[] array,int low ,int high,int k){
if(array[low] == k)
return low;
while(low <= high){
int mid = low + (high - low)/2;
if(mid >=1 && array[mid-1]!=k && array[mid] ==k) // mid - 1越界要判断
return mid;
if(array[mid] >=k){  // 考虑等于
high = mid - 1;
}else {
low = mid + 1;
}
}
return -1;
}
// 求右边界
public int right(int[] array,int low ,int high,int k){
if(array[high] == k)
return high;
while(low <= high){
int mid = low + (high - low)/2;
if(mid + 1 < array.length && array[mid]==k && array[mid+1] !=k) // mid + 1越界要判断
return mid;
if(array[mid] >k){
high = mid - 1;
}else { // 等于在这里考虑
low = mid + 1;
}
}
return -1;
}
}


当然也可以求出一个边界,然后再线性查找
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: