题解 | #数字在升序数组中出现的次数#
数字在升序数组中出现的次数
https://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2
基本思路:有序数组,所以可以线性时间复杂度遍历找到该长度。
优化:有序数组中的查找一般都是将线性查找优化为二分搜索。可以转变一下思路,求出该数组中第一个大于等于k的数的下标,以及第一个大于等于k+1,即大于k的数的下标,这两者相减,即为[k, k+1)区间内的数的个数,也即为k的个数。
class Solution { public: int helper(vector<int>& data, int k) { int l = 0, r = data.size() - 1; while (l <= r) { int mid = l + (r - l) / 2; if (data[mid] < k) { l = mid + 1; } else { r = mid - 1; } } return l; } int GetNumberOfK(vector<int> data ,int k) { return helper(data, k + 1) - helper(data, k); } };