36数字在排序数组中出现的次数

题目描述

统计一个数字在排序数组中出现的次数。
思路:记住二分搜索的复杂度是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;
    }
};

 

posted @ 2018-01-04 20:29  zqlucky  阅读(163)  评论(0编辑  收藏  举报