使用二分查找法统计一个数字在排序数组中出现的次数
数字在排序数组中出现的次数
http://www.nowcoder.com/questionTerminal/70610bf967994b22bb1c26f9ae901fa2
利用二分查找法,找到左边界和右边界来确定个数。
假设找到的坐标为index,检查array[index-1]处的值是不是也为所查找的数,
是的话则使用二分查找法在0至index-1范围内查找,直到array[index-1]处不为所查数,获得左边界。
同样检查array[index+1]处的值是不是也为所查找的数,获得右边界。
使用Arrays里自带的binarySearch()方法,正好熟悉下Arrays类,xiaxiaixia~
public int GetNumberOfK(int[] array, int k) { int left = 0, right = -1; int index = Arrays.binarySearch(array, k); left = index; if (index < 0) return 0; while (index != 0 && array[index - 1] == k) { index = Arrays.binarySearch(array, 0, index, k); left = index; } index = Arrays.binarySearch(array, k); right = index; while (index != array.length - 1 && array[index + 1] == k) { index = Arrays.binarySearch(array, index + 1, array.length, k); right = index; } return right - left + 1; }