数字在排序数组中出现的次数
题目描述
统计一个数字在排序数组中出现的次数。
*/C++
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
return biSearch(data,k+0.5)-biSearch(data,k-0.5);
}
int biSearch(vector<int> data, double num){
int left = 0, right = data.size()-1;
while(left<=right){
int mid = (left + right)/2;
if (data[mid] > num){
right = mid-1;
}
else if (data[mid] == num){
return mid;
}
else
left = mid +1;
}
return left;
}
};
*/
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
auto resultPair = equal_range(data.begin(), data.end(),k);
return resultPair.second - resultPair.first;
}
};
*/
class Solution {
public:
int GetNumberOfK(vector<int> data, int k) {
int lower = getLower(data,k);
int upper = getUpper(data,k);
return upper - lower + 1;
}
int getLower(vector<int> data, int k){
int left = 0, right = data.size()-1;
while(left <= right){
int mid = (left+right)/2;
if(data[mid] < k){
left = mid + 1;
}
else
right = mid - 1;
}
return left;
}
int getUpper(vector<int> data, int k){
int left = 0, right = data.size()-1;
while(left <= right){
int mid = (left+right)/2;
if(data[mid] <= k){
left = mid + 1;
}
else
right = mid - 1;
}
return right;
}
};
*/
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
//单纯的利用了count函数。。。。。
return count(data.begin(),data.end(),k);
}
};
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
auto left = lower_bound(data.begin(), data.end(), k);
auto right = upper_bound(data.begin(), data.end(), k);
return right - left;
}
};
*/
class Solution {
public:
int GetNumberOfK(vector<int> data, int k){
if(data.size() == 0)
return 0;
int left=0,right=data.size()-1;
int index = -1;
while(left<=right){
int mid = (left+right)/2;
if(data[mid]==k){
index = mid;
break;
}
else if (data[mid]>k)
right = mid-1;
else
left = mid + 1;
}
if (index=-1)
return 0;
low = index-1;
high = index+1;
while(low>=0 && data[low] ==k)
--low;
while(high<data.size() && data[high] == k)
++high;
return high-low-1;
}
};
*/Python
# -*- coding:utf-8 -*-
class Solution:
def GetNumberOfK(self, data, k):
# write code here
return data.count(k)
*/
class Solution:
# 二分法找到k值的位置
def BinarySearch(self, data, mlen, k):
start = 0
end = mlen - 1
while start <= end:
mid = (start + end) //2
if data[mid] < k:
start = mid + 1
elif data[mid] > k:
end = mid - 1
else:
return mid
return -1
def GetNumberOfK(self, data, k):
# write code here
mlen = len(data)
# 先使用二分法找到k值的位置
index = self.BinarySearch(data, mlen, k)
if index == -1:
return 0
# 分别向该位置的左右找
count = 1
for i in range(1,mlen):
if index + i < mlen and data[index+i] == k:
count += 1
if index - i >= 0 and data[index-i] == k:
count += 1
return count