/**法一:暴力做法。
--------
遍历一次整个数组,a[i]==k的时候就cout++,或者用HashMap()保存整数和出现次数,最后返回就是
法二:二分查找
-------
先二分法查找到给定值,然后在这个位置向两边扩散(low...high)查看,理论上要比法一快一些
法三:插入特殊值法
---------
因为是整形数组,所以插入k+0.5,和k-0.5的位置只差就是k的个数了
*/
public static int GetNumberOfK(int [] array , int k) {
if(array==null) return 0;
int n=array.length;
if(n<=0||array[0]>k||array[n-1]<k)
return 0;
return getPosition(array,k+0.5)-getPosition(array,k-0.5);
}
public static int getPosition(int a[],double key){
int low=0,high=a.length-1;
while(low<=high){
int mid=(low+high)/2;
double cmp=a[mid]-key;
if(cmp==0) return mid;
else if(cmp>0)
high=mid-1;
else
low=mid+1;
}
return low;
}
查找在数组中target出现的次数
最新推荐文章于 2022-03-08 10:47:33 发布