34、數字在排序數組中出現的次數t

題目:

統計一個數字在排序數組中出現的次數。

解法:

1、先求該數字出現的最左邊位置。

2、再求該數字出現的最右邊位置。

3、若該數字未出現,則會出現left在right右邊。且相鄰的情況。

最後結果仍然爲right-left+1 =0

代碼:

    int GetNumberOfK(vector<int> data ,int k) {
        if(data.size()==0||data.empty() ) //邊界異常判斷
            return 0;
        int n = data.size();
        int left =0;
        int right = n-1;
        while(left<=right) //兩個while只有一處不一樣, 
        {  // 求left位置
            int mid = (right+left)>>1;
            if(data[mid]<k)
                left = mid+1;
            else if(data[mid]>k)
                right = mid-1;
            else if(data[mid]==k) 中間值等於目標值K,那麼出現k值的最左邊位置一定位於left,mid-1之間。
                right =mid-1;
        }
        int a= left;
        left =0;
        right = n-1;
        while(left<=right) //求right位置。
        {
            int mid = (right+left)>>1;
            if(data[mid]<k)
                left = mid+1;
            else if(data[mid]>k)
                right = mid-1;
            else if(data[mid]==k) //中間值等於目標k,那麼出現K的最右位置一定在mid+1,right之間。
                left =mid+1;
        }
        return right-a+1;
    }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章