Question
统计一个数字在排序数组中出现的次数。
关键词:有序数组 次数 折半查找
Solution
折半找到相等的某个数,向前向后数。
折半查找
时间复杂度:O(N)?
空间复杂度:O(1)
- Python
class Solution:
def GetNumberOfK(self, data, k):
count = 0
l = 0
r = len(data)-1
while l<=r:
mid = (l+r)//2
if data[mid]==k:
count = 1
low = mid-1
hi = mid+1
while low>=0 and data[low]==k:
count += 1
low -= 1
while hi<len(data) and data[hi]==k:
count += 1
hi += 1
break
elif data[mid]>k:
r = mid-1
else:
l = mid+1
return count
- C++
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
int l = 0;
int r = data.size()-1;
int count = 0;
while(l<=r){
int mid = (l+r)/2;
if (data[mid]==k){
count = 1;
int low = mid-1;
int hi = mid+1;
while(low>=0 && data[low]==k){
count++;
low--;
}
while(hi<data.size() && data[hi]==k){
count++;
hi++;
}
break;
}
else if(data[mid] > k)
r = mid-1;
else
l = mid+1;
}
return count;
}
};