描述
统计一个数字在升序数组中出现的次数。
示例1
输入:
[1,2,3,3,3,3,4,5],3
复制返回值:
4
public class Jz37_GetNumberOfK {
@Test
public void test() {
int[] arr = {3};
int i = GetNumberOfK(arr, 3);
System.out.println(i);
}
public int GetNumberOfK(int[] array, int k) {
int ans = 0;
int l = 0;
int r = array.length - 1;
while (l >= 0 && l < array.length && r >= 0 && r < array.length && l <= r) {
int mid = (l + r) / 2;
if (array[mid] == k) {
l = r = mid;
break;
} else if (array[mid] > k) {
l = mid + 1;
} else {
r = mid - 1;
}
}
if (l >= 0 && l < array.length && r >= 0 && r < array.length && array[l] == k) {
for (int i = l; i < array.length; i++) {
if (array[i] == k) {
ans++;
}
}
for (int i = l - 1; i >= 0; i--) {
if (array[i] == k) {
ans++;
}
}
}
return ans;
}
}