题目描述
统计一个数字在排序数组中出现的次数。
思路:记住二分搜索的复杂度是O(logn),复杂度的计算方式是主定理。二分搜索模板要记得。
这题要注意没有找到相关元素的返回情况,初始化的时候将两个位置初始化为-1,在最后判断以下,如果两个都是-1就是没有找到位置,这个时候就返回0,如果找到了就pos2 - pos1 + 1.
class Solution { public: int GetNumberOfK(vector<int> data ,int k) { if(data.size() == 0){ return 0; } int start = 0,end = data.size() - 1; int mid = start + (end - start) / 2; int pos1 = -1,pos2 = -1; int flag = false; while(start + 1 < end){ mid = start + (end - start) / 2; if(data[mid] == k){ end = mid; } else if(data[mid] < k){ start = mid; } else{ end = mid; } } if(data[start] == k){ pos1 = start; } else if(data[end] == k){ pos1 = end; } start = 0,end = data.size() - 1; while(start + 1 < end){ mid = start + (end - start) / 2; if(data[mid] == k){ start = mid; } else if(data[mid] < k){ start = mid; } else{ end = mid; } } if(data[end] == k){ pos2 = end; } else if(data[start] == k){ pos2 = start; } int cnt = 0; if(pos2 != -1 && pos1 != -1){//判断是否找到该元素 cnt = pos2 - pos1 + 1; } return cnt; } };