1. 程式人生 > 其它 >JZ37 劍指offer 數字在升序陣列中出現的次數

JZ37 劍指offer 數字在升序陣列中出現的次數

技術標籤:劍指

第37題 數字在升序陣列中出現的次數

題目描述

統計一個數字在升序陣列中出現的次數。

class Solution {
public:
    int GetNumberOfK(vector<int> data ,int k) {
        int lb = 0, rb = 0;
        int l = 0, r = data.size();
        while(l<r){
            int mid = l + (r-l)/2;
            if(data[mid]< k) l=mid+1;
            else
r = mid; } lb = l; l = 0, r = data.size(); while(l<r){ int mid = l + (r-l)/2; if(data[mid]<=k) l=mid+1; else r = mid; } rb = l; return rb-lb; } };

思路:
利用二分查找出該數的左右邊界,找左邊界時候,如果mid值小於k,左指標移到mid+1處,如果mid值大於等於k,右指標移到mid處。

找右邊界(第一個大於k的位置)的時候,如果mid值小於等於k,左指標移到mid+1,如果mid值大於k,右指標移到mid處。