面试题 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;
}

 

posted @ 2013-09-17 16:54  冰点猎手  阅读(197)  评论(0编辑  收藏  举报