题目链接:
数字在升序数组中出现的次数_牛客题霸_牛客网 (nowcoder.com)
题目简介:
描述
给定一个长度为 n 的非降序数组和一个非负数整数 k ,要求统计 k 在数组中出现的次数
数据范围: 0≤n≤1000,0≤k≤100,数组中每个元素的值满足 0≤val≤100
要求:空间复杂度 O(1),时间复杂度 O(logn)
题目解法:
/**
*
* @param data int整型一维数组
* @param dataLen int data数组长度
* @param k int整型
* @return int整型
*/
int GetNumberOfK(int* data, int dataLen, int k ) {
// write code here
int l = 0;
int r = dataLen - 1;
int cur;
if(!dataLen) return 0;
while(l <= r){ //先通过二分查找到目标k其中所在的位置
cur = l + (r-l)/2;
if(data[cur] < k){
l = cur+1;
}else if(data[cur] > k){
r = cur-1;
}else{ //找到k
l = cur, r = cur; //此时利用lr来寻找k的左右边界
while(l-1 >= 0 && data[l-1] == k)l--;
while(r+1 < dataLen && data[r+1] == k)r++;
return r-l+1; //返回k的数量
}
}
return 0;
}