题目描述
统计一个数字在排序数组中出现的次数。
思路
1.直接遍历,太没有挑战性了。
2.二分查找确定该数,然后再二分查找确定比它小的数和二分查找比它大的数。相隔的距离就是该数的个数,但是要注意的是,比它小的最后一个数和比它大的第一个数。
1.直接遍历的方法
2.二分查找
思路
1.直接遍历,太没有挑战性了。
2.二分查找确定该数,然后再二分查找确定比它小的数和二分查找比它大的数。相隔的距离就是该数的个数,但是要注意的是,比它小的最后一个数和比它大的第一个数。
1.直接遍历的方法
public class Solution {
public int GetNumberOfK(int [] array , int k) {
int num=0;
if(array==null||array.length==0)return 0;
for(int ii=0;ii<array.length;ii++){
if(array[ii]==k)num++;
}
return num;
}
}
2.二分查找
public class Solution {
public int GetNumberOfK(int [] array , int k) {
int begin = 0;
int mid, mark;
mark = 0;
int end = array.length - 1;
int k1,k2;
while (begin <= end) {
mid = (begin + end) >> 1;
if (array[mid] == k) {
mark = 1;
break;
}
if (array[mid] < k) {
begin = mid + 1;
} else {
end = mid - 1;
}
}
begin = 0;
end = array.length - 1;
while (begin <= end) {
mid = (begin + end) >> 1;
if (array[mid] < k) {
begin = mid + 1;
} else {
end = mid - 1;
}
}
k1=begin;//这个k1为k值的第一个位置
//System.out.println(begin+" "+end);
begin = 0;
end = array.length - 1;
while (begin <= end) {
mid = (begin + end) >> 1;
if (array[mid] <= k) {
begin = mid + 1;
} else {
end = mid - 1;
}
}
k2=end;//这个k2为k值的最后一个位置
return k2-k1+1;
}
}