首页 > 学院 > 开发设计 > 正文

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

2019-11-08 19:56:55
字体:
来源:转载
供稿:网友

题目描述

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

算法解析:

最直观的解法,就是从头到尾扫描整个排序数组,但是对于排序数组的话,如果我们使用二分法的话,应该会起到意想不到的结果,但是既然是有多个相同的数字,那么我们可以利用二分法查找第一个k和最后一个k,然后就可以找出出现的次数。

代码如下:

public int GetNumberOfK(int [] array , int k) { int number = 0; if (array != null && array.length > 0){ int firstK = getFirstK(array, k, 0, array.length - 1); int lastK = getLastK(array, k, 0, array.length - 1); if (firstK > -1 && lastK > -1){ number = lastK - firstK + 1; } } return number; } PRivate int getLastK(int[] array, int k, int start, int end) { if (start > end){ return -1; } int mid = (start + end) >> 1; if (array[mid] == k){ if ((mid < array.length - 1 && array[mid + 1] != k) || mid == array.length - 1){ return mid; }else { start = mid + 1; } }else if (array[mid] < k){ start = mid + 1; }else{ end = mid - 1; } return getLastK(array, k, start, end); } private int getFirstK(int[] array, int k, int start, int end) { if (start > end){ return -1; } int mid = (start + end) >> 1; if (array[mid] == k){ if ((mid > 0 && array[mid - 1] != k) || mid == 0){ return mid; }else { end = mid - 1; } }else if (array[mid] > k){ end = mid - 1; }else{ start = mid + 1; } return getFirstK(array, k, start, end); }
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表