数字在排序数组中出现的次数
来源:互联网 发布:git for mac 客户端 编辑:程序博客网 时间:2024/06/01 15:56
题目描述
统计一个数字在排序数组中出现的次数。
算法解析:
最直观的解法,就是从头到尾扫描整个排序数组,但是对于排序数组的话,如果我们使用二分法的话,应该会起到意想不到的结果,但是既然是有多个相同的数字,那么我们可以利用二分法查找第一个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); }
0 0
- 【数组8】数字在排序数组中出现的次数
- 【数组4】数字在排序数组中出现的次数
- 数组9:数字在排序数组中出现的次数
- 数字在排序数组中出现的次数(数组)
- 在排序数组中,找出给定数字的出现次数
- 在排序数组中,找出给定数字的出现次数
- 在排序数组中,找出给定数字的出现次数
- 统计一个数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 在排序数组中,找出给定数字的出现次数
- 在排序数组中,找出给定数字出现的次数
- 数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 在排序数组中,找出给定数字的出现次数
- .net 基础服务开源战略规划备忘录
- 多态、抽象、接口
- WCF创建宿主程序
- java中synchronized关键字的用法
- Deconvolution
- 数字在排序数组中出现的次数
- C#/VC调用QT控件
- volatile
- LEDE/OpenWrt for TL-WDR5600(QCA956X)
- Matlab2012b安装指南
- 性能优化之Java(Android)代码优化
- DOS-常见的DOS命令讲解
- OpenGL核心技术之GPU编程
- Go语言中的defer关键字