文章524
标签277
分类67

算法:数字在排序数组中出现的次数


数字在排序数组中出现的次数

数字在排序数组中出现的次数

统计一个数字在排序数组中出现的次数。


分析

注意到, 数组是有序的, 可以先通过二分找到其中出现的任意一个的索引

然后计算这个这个索引左右两侧的个数即可.


代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.util.Arrays;
public class Solution {
public int GetNumberOfK(int[] array, int k) {
int index = Arrays.binarySearch(array, k);
if (index < 0) return 0;
return findLeft(array, index - 1, k) + findRight(array, index + 1, k) + 1;
}

private int findLeft(int[] arr, int i, int aim) {
int res = 0;
for (; i >= 0 && arr[i] == aim; i--) {
res++;
}
return res;
}

private int findRight(int[] arr, int i, int aim) {
int res = 0;
for (; i < arr.length && arr[i] == aim; i++) {
res++;
}
return res;
}
}

本文作者:Jasonkay
本文链接:https://jasonkayzk.github.io/cn/1996/07/27/%E7%AE%97%E6%B3%95-%E6%95%B0%E5%AD%97%E5%9C%A8%E6%8E%92%E5%BA%8F%E6%95%B0%E7%BB%84%E4%B8%AD%E5%87%BA%E7%8E%B0%E7%9A%84%E6%AC%A1%E6%95%B0/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可