题解 | #二分#
数字在升序数组中出现的次数
http://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2
二分
class Solution { public: int GetNumberOfK(vector<int> data ,int k) { int n = data.size(); if(n == 0) return 0; int left = 0, right = n - 1; int start = lower_bound(data.begin(), data.end(), k) - data.begin(); if(data[start] != k) return 0; int end = lower_bound(data.begin(), data.end(), k + 1) - data.begin(); //cout << start << " " << end; return end - start; } };
class Solution { public: int helper(vector<int> data, int target){ int n = data.size(); int left = 0, right = n - 1; while(left < right){ int mid = left + (right - left) / 2; if(data[mid] >= target) right = mid; else left = mid + 1; } return left; } int GetNumberOfK(vector<int> data ,int k) { int n = data.size(); if(n == 0) return 0; int left = 0, right = n - 1; int start = helper(data, k); if(data[start] != k) return 0; int end = helper(data, k + 1); if(data[end] == k) end ++; return end - start; } };