1. 程式人生 > >[劍指offer] 37. 數字在排序陣列中出現的次數

[劍指offer] 37. 數字在排序陣列中出現的次數

題目描述

統計一個數字在排序陣列中出現的次數。
思路: 已知是排序陣列,利用二分查詢到k的上下界,相減
class Solution
{
  public:
    int GetNumberOfK(vector<int> data, int k)
    {
        if (data.empty())
            return 0;
        int low = getLowerK(data, 0, data.size() - 1, k);
        int high = getHigherK(data, 0
, data.size() - 1, k); cout << low << " " << high << endl; if (low > -1 && high > -1) return (high - low + 1); return 0; } int getLowerK(vector<int> &data, int beg, int end, int k) { if (beg > end)
return -1; int mid = beg + (end - beg) / 2; if (data[mid] == k) { if ((mid == beg) || (data[mid - 1] != k)) return mid; else end = mid - 1; } else if (data[mid] > k) end = mid - 1; else
beg = mid + 1; return getLowerK(data, beg, end, k); } int getHigherK(vector<int> &data, int beg, int end, int k) { if (beg > end) return -1; int mid = beg + (end - beg) / 2; if (data[mid] == k) { if ((mid == end) || (data[mid + 1] != k)) return mid; else beg = mid + 1; } else if (data[mid] > k) end = mid - 1; else beg = mid + 1; return getHigherK(data, beg, end, k); } };