劍指Offer——JZ37.數字在排序數組中出現的次數【二分】

題目傳送門


在這裏插入圖片描述


題解

  • 遍歷一遍真的是太不優美(sb)了
  • 有序數組嘛,閉着眼睛都知道是二分→_→
  • 找到兩個位置
    1. 第一個>=k的位置
    2. 第一個>k的位置
      在這裏插入圖片描述

AC-Code

class Solution {
public:
    int GetNumberOfK(vector<int> data ,int k) {
//        return solve(data, k);
        auto lindex = lower_bound(data.begin(), data.end(), k);
        auto rindex = upper_bound(data.begin(), data.end(), k);
        return rindex - lindex;
    }
    int solve(vector<int> data ,int k) {
        int L = 0, R = data.size();
        int lindex, rindex;
        while(L < R) {    // 下界
            int mid = (L + R) >> 1;
            if(data[mid] < k)
                L = mid + 1;
            else
                R = mid;
        }
        lindex = L;
        L = 0, R = data.size();
        while(L < R) {    // 上界
            int mid = (L + R) >> 1;
            if(data[mid] <= k)
                L = mid + 1;
            else
                R = mid;
        }
        rindex = R;
        return rindex - lindex;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章