数字在排序数组中出现的次数
class Solution { public: int GetNumberOfK(vector<int> data ,int k) { if(data.size()==0) return 0; int first = GetFirstK(data,k,0,data.size()-1); int last = GetLastK(data,k,0,data.size()-1); int number = 0; 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 middIndex = (start + end) / 2; int middData = data[middIndex]; if (middData == k) { if ((middIndex > 0 && data[middIndex - 1] != k) || middIndex == 0) { return middIndex; } else { end = middIndex - 1; } } else if (middData > k) { end = middIndex - 1; } else { start = middIndex + 1; } return GetFirstK(data, k, start, end); } int GetLastK(vector<int> & data, int k, int start, int end) { if (start > end) { return -1; } int middIndex = (start + end) / 2; int middData = data[middIndex]; if (middData == k) { if ((middIndex < data.size() - 1 && data[middIndex + 1] != k) || middIndex == end) { return middIndex; } else { start = middIndex + 1; } } else if (middData > k) { end = middIndex - 1; } else { start = middIndex + 1; } return GetLastK(data, k, start, end); } };