题目内容 数字在排序数组中出现的次数
尝试一
结果:答案正确:恭喜!您提交的程序通过了所有的测试用例
代码:
public class Solution {
/*利用二分查找*/
public int GetNumberOfK(int [] array , int k) {
/* 特殊情况处理*/
if(array==null || array.length==0){
return 0;
}
/* 二分查找,确定第一个k出现的位置i*/
int i=-1;
i=binarySerach(0,array.length-1,array, k);
/* 从i向左右两边探测,看是否与k值相同,若相同count++*/
int count=0;
if(i!=-1){
/*向右探测*/
int l=i-1;
count=1;
while (++i<array.length && array[i]==k){
count++;
}
/*向左探测*/
while (l>-1 && array[l]==k){
count++;
l--;
}
}
/* 返回结果*/
return count;
}
private int binarySerach(int left,int right,int[] a,int k){
if(right<left){
return -1;
}
if(k==a[left]){
return left;
}
if(k==a[right]){
return right;
}
int m=(left+right)/2;
if(k==a[m]){
return m;
}
else if(k<a[m]){
return binarySerach(left+1,m-1,a,k);
}else{
return binarySerach(m+1,right-1,a,k);
}
}
}
分析:二分查找,找到k首次出现的位置,然后向两边探测。
总结
- 二分查找,适合用来查找某个东西是否在有序的序列中。
- 二分查找,注意递归结束标识
left<right、right==x、left==x、midle==x.
博客围绕排序数组中数字出现的次数展开。通过二分查找找到数字首次出现的位置,再向两边探测得出结果,程序通过所有测试用例。同时总结指出二分查找适用于在有序序列中查找元素,且要注意递归结束标识。
659

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



