题目描述
统计一个数字在升序数组中出现的次数。
示例1
- 输入
[1,2,3,3,3,3,4,5],3
- 返回值
4
解题思路
- 直接遍历
数组是有序数组,可以直接遍历数组,记录数字k在数组中出现的次数。
public class Solution {
public int GetNumberOfK(int [] array , int k) {
int res = 0;
for (int i = 0; i < array.length; i++) {
if(array[i] == k) {
res++;
}
}
return res;
}
}
- 二分法
分别找到上下界。
代码
public class Solution {
public int GetNumberOfK(int [] array , int k) {
int left, right;
int l = 0, r = array.length;
while (l < r) {
int mid = (l + r)/2;
if (array[mid] <= k) {
l = mid + 1;
} else {
r = mid;
}
}
right = l;
l = 0; r = array.length;
while (l < r) {
int mid = (l + r)/2;
if (array[mid] < k) {
l = mid + 1;
} else {
r = mid;
}
}
left = l;
return right - left;
}
}