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; }