剑指Offer系列-面试题38:数字在排序数组中出现的次数
来源:互联网 发布:产品数据图纸英语 编辑:程序博客网 时间:2024/05/23 19:16
题目:统计一个数字在排序数组中出现的次数。
思路:二分查找该数字第一次出现的位置,然后找最后一次出现的位置,相减即可。用二分查找,时间复杂度为O(log n)。
代码:
public int GetNumberOfK(int [] array , int k) {if (array == null || array.length <= 0) {return 0;}int start = GetFirstK(array, k, 0, array.length - 1);if (start < 0) {return 0;}System.out.println(start);int end = GetLastK(array, k, start, array.length - 1);System.out.println(end);if (end < 0) {return 0;}return end - start + 1;}private int GetFirstK(int [] array, int k, int start, int end) {if (start > end) {return -1;}int mid = (start + end) / 2;int midData = array[mid];if (midData == k) {// 如果中间位置的前边不是k,或者此位置就是0,那么就是找到了,返回if ((mid > 0 && array[mid - 1] != k) || mid == 0) {return mid;} else { // 否则,要找的位置在左边end = mid - 1;}} else if (midData > k) { // 要找的位置在左边end = mid - 1;} else { // 要找的位置在右边start = mid + 1;}return GetFirstK(array, k, start, end);}private int GetLastK(int [] array, int k, int start, int end) {if (start > end) {return -1;}int mid = (start + end) / 2;int midData = array[mid];if (midData == k) {if ((mid < array.length - 1 && array[mid + 1] != k) || mid == array.length - 1) {return mid;} else {start = mid + 1;}} else if (midData > k) {end = mid - 1;} else {start = mid + 1;}return GetLastK(array, k, start, end);}
0 0
- 剑指Offer系列-面试题38:数字在排序数组中出现的次数
- [剑指offer][面试题38]数字在排序数组中出现的次数
- 剑指Offer:面试题38 数字在排序数组中出现的次数
- 剑指offer面试题38:数字在排序数组中出现的次数
- 剑指offer 面试题38—数字在排序数组中出现的次数
- 《剑指Offer》学习笔记--面试题38:数字在排序数组中出现的次数
- 【剑指Offer学习】【面试题38:数字在排序数组中出现的次数】
- 剑指Offer面试题38(Java版):数字在排序数组中出现的次数
- 剑指offer-面试题38:数字在排序数组中出现的次数
- 剑指offer之面试题38数字在排序数组中出现的次数
- 剑指offer面试题38:数字在已排序数组中出现的次数
- 剑指offer面试题38:数字在排序数组中出现的次数
- 剑指Offer----面试题38:数字在排序数组中出现的次数
- 剑指Offer面试题38:数字在排序数组中出现的次数 Java实现
- 剑指offer--面试题38:数字在排序数组中出现的次数
- 剑指Offer面试题38(Java版):数字在排序数组中出现的次数
- 剑指offer——面试题38:数字在排序数组中出现的次数
- 【剑指offer】面试题38-数字在排序数组中出现的次数
- pat L2-005. 集合相似度(set的简单应用)
- 代码模板:python-基础-4(时间戳转换)
- 关于第三方apk如何禁用systemUI的statusbar
- 进程间通信---共享内存
- 深入学习JavaScript: apply 方法——转
- 剑指Offer系列-面试题38:数字在排序数组中出现的次数
- TextView使部分文字具有超链接(或点击)功能
- VS2013控制台一闪而过,修改快捷键
- 编码解码
- bzoj 3620: 似乎在梦中见过的样子 kmp算法+暴力
- 如何进入、退出docker的container
- 三天打渔两天晒网c语言程序
- JavaWeb配置外网服务器
- blog 2