面试题 38数字在排序数组中出现的次数
int getPositionFK(int data[], int length, int K)
{
int left = 0, right = length -1;
while(left <= right){
int middle = left + (right- left)>>1;
if(data[middle] == K ){
if( index == 0 || (data[index-1] != K))
return middle;
else
right = middle -1;
}else if(data[middle] < K){
left = middle + 1;
}else{
right = middle -1;
}
return -1;
}
int getPostionLK(int data[], int length, int K)
{
int left = 0;
int right = length -1;
while(left <= right){
int mid = left + (right - left)>>1;
if(data[mid] == K){
if(mid == length -1 ||( data[mid+1] != K))
return mid;
else
left = mid +1;
}else if(data[mid] < K){
left = mid + 1;
}else{
right = mid -1;
}
}
return -1;
}
int getNumberOfK(int data[], int length, int K)
{
if(data == NULL || length < 1) return 0;
int first = getPositionFK(data, length, K);
int last = getPositionLF(data, length, K);
if(first == -1 || last == -1)
return 0;
return last - first + 1;
}
--------------------------------------------------------------------天道酬勤!

浙公网安备 33010602011771号