/********************** 参考代码 ******/ int getFirstK(int* data, int length, int k, int start, int end) { if (start > end) { return -1; } int middleIndex = (start + end) / 2; int currentData = data[middleIndex]; if (currentData == k) { if (middleIndex == 0 || (middleIndex > 0 && data[middleIndex - 1] != k) ) { return middleIndex; } else { end = middleIndex - 1; } } else if (currentData > k) { end = middleIndex - 1; } else { start = middleIndex + 1; } return getFirstK(data, length, k, start, end); }
int GetNumberOfK(vector<int> data ,int k) { int result=0; if(data.empty()) return 0; int start = 0; int end = data.size()-1; int first = getFirstK(data,k,start,end); int last = getLastK(data,k,start,end); if(first >-1 && last >-1) result = last - first+1; return result; }
int getNumbersOfK(int* data, int length, int k) { int number = 0; if (data != NULL && length > 0) { int first = getFirstK(data, length, k, 0, length - 1); int last = getLastK(data, length, k, 0, length - 1); if (first > -1 && last > -1) { number = last - first + 1; } } return number; }
int getFirstK(vector<int> data, int k, int start, int end) { if(start > end) return -1; int midIndex = (start + end)/2; int midData = data[midIndex]; if(midData == k) { if(midIndex > 0 && data[midIndex-1] != k || midIndex == 0) return midIndex; else end = midIndex-1; } else if(midData > k) end = midIndex-1; else start = midIndex+1; return getFirstK(data,k,start,end); }