第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;
}
};
class Solution:
def search(self, nums: List[int], target: int) -> int:
def insert(tar) -> int:
i, j = 0, len(nums) - 1
while i <= j:
mid = (i + j) // 2
if nums[mid] <= tar:
i = mid + 1
else:
j = mid - 1
return i
return insert(target) - insert(target - 1)
思路:
利用二分查找出该数的左右边界,找左边界时候,如果mid值小于k,左指针移到mid+1处,如果mid值大于等于k,右指针移到mid处。
找右边界(第一个大于k的位置)的时候,如果mid值小于等于k,左指针移到mid+1,如果mid值大于k,右指针移到mid处。
本文介绍了一种使用二分查找法确定指定数字在升序数组中的出现次数的方法。通过寻找目标数字的左右边界来高效地计算其出现频率。
172万+

被折叠的 条评论
为什么被折叠?



