题目描述
统计一个数字在排序数组中出现的次数;
解题思路
方法一
直接遍历,进行统计即可;
public int GetNumberOfK(int[] array, int k) { int nums = 0; for (int i : array) { if (i == k) { nums++; } } return nums; }
很显然,面试官不需要这种答案;
方法二
二分查找
public int GetNumberOfK2(int[] array, int k) { int start = binaryFind(array, k); int end = binaryFind(array, k + 1); return (start == array.length || array[start] != k) ? 0 : end - start; } private int binaryFind(int[] nums, int K) { int l = 0, h = nums.length; while (l < h) { int m = l + (h - l) / 2; if (nums[m] >= K) h = m; else l = m + 1; } return l; }