算法复习:数字在排序数组中出现的次数
来源:互联网 发布:网络拉丝是什么意思 编辑:程序博客网 时间:2024/06/14 15:57
题目描述
统计一个数字在排序数组中出现的次数
解题思路
(1)遍历一次求出个数
(2)使用二分查找求出第一个和最后一个的下标。如何求第一个数字呢,假如要找的数字和中间的数字相等,则判断其前面一个数字(下标不越界),假如不相等则是第一个数字。同理可求最后一个数字。需要注意的是数组下标越界问题。
代码:
public static int GetNumberOfK(int[] array, int k) { int number = 0; if (array != null && array.length > 0) { int firstK = getFirstK(array, k); int lastK = getLastK(array, k); if (firstK > -1 && lastK > -1) return lastK - firstK + 1; } return number;}public static int getFirstK(int[] array, int k) { int start = 0; int end = array.length - 1; int middle; while (start <= end) { middle = (start + end) / 2; int middleNum = array[middle]; if (middleNum == k) { if ((middle > 0 && (array[middle - 1] != k)) || middle == 0) { return middle; } else { end = middle - 1; } } else if (middleNum < k) { start = middle + 1; } else { end = middle - 1; } } return -1;}public static int getLastK(int[] array, int k) { int start = 0; int end = array.length - 1; int middle; while (start <= end) { middle = (start + end) / 2; int middleNum = array[middle]; if (middleNum == k) { if ((middle < end && (array[middle + 1] != k)) || middle == end) { return middle; } else { start = middle + 1; } } else if (middleNum < k) { start = middle + 1; } else { end = middle - 1; } } return -1;}
阅读全文
0 0
- 算法复习:数字在排序数组中出现的次数
- 算法题目---数字在排序数组中出现的次数
- 算法-数字在排序数组中出现的次数
- 算法题/数字在排序数组中出现的次数
- 剑指offer——数字在排序数组中出现的次数(复习二分)
- 【数组8】数字在排序数组中出现的次数
- 【数组4】数字在排序数组中出现的次数
- 数组9:数字在排序数组中出现的次数
- 数字在排序数组中出现的次数(数组)
- 在排序数组中,找出给定数字的出现次数
- 在排序数组中,找出给定数字的出现次数
- 在排序数组中,找出给定数字的出现次数
- 统计一个数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 在排序数组中,找出给定数字的出现次数
- 在排序数组中,找出给定数字出现的次数
- 数字在排序数组中出现的次数
- (转)JAVA面试中问及HIBERNATE与 MYBATIS的对比
- Java中九大内置对象
- Java中Synchronized的用法
- RecyclerView 滑动时,添加indicator,并实现联动
- java过滤防止sql注入过滤
- 算法复习:数字在排序数组中出现的次数
- [置顶]CentOS7配置FTP服务器增强版~(零基础学会FTP配置)
- MyEclipse 选中属性或方法后 相同的不变色
- 如何用数据仓库管理海量数据?直接访问数据仓库数据时的4个限制
- hdu 2962(二分答案+最短路)
- PHP数组根据数组内的某个单元字段排序
- 深入理解Apache Flink核心技术
- -bash xxx command not found
- HTML&CSS高级课程