[劍指offer] 37. 數字在排序陣列中出現的次數
阿新 • • 發佈:2018-12-20
題目描述
統計一個數字在排序陣列中出現的次數。思路: 已知是排序陣列,利用二分查詢到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; elsebeg = 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); } };