剑指offer_数字在排序数组中出现的次数
2017-06-05 11:02
423 查看
题目描述
统计一个数字在排序数组中出现的次数。解题思路
排序数组中查找,利用二分查找改进二分查找,计算k值起始位和结束位
lastK - firstK + 1
Java实现
public class Solution { public int GetNumberOfK(int [] array , int k) { int length = array.length; if (length == 0) return 0; int firstK = getFirstK(array, k, 0, length-1); int lastK = getLastK(array, k, 0, length-1); if (firstK > -1 && lastK > -1) return lastK - firstK + 1; return 0; } private int getFirstK(int[] array, int k, int start, int end){ int length = array.length; int mid = start + (end - start) >> 1; while(start <= end){ if(array[mid] > k){ end = mid - 1; }else if(array[mid] < k){ start = mid + 1; }else if(mid-1 >= 0 && array[mid-1] == k){ end = mid - 1; }else{ return mid; } mid = start + ((end - start) >> 1); } return -1; } private int getLastK(int[] array, int k, int start, int end){ int length = array.length; int mid = start + (end - start) >> 1; while(start <= end){ if(array[mid] > k){ end = mid - 1; }else if(array[mid] < k){ start = mid + 1; }else if(mid+1 <= end && array[mid+1] == k){ //二分查找改进地方 start = mid + 1; }else{ return mid; } //更新mid,计算mid要使用如下方法 mid = start + ((end - start) >> 1); } return -1; } }
相关文章推荐
- 剑指offer题目——数字在排序数组中出现的次数
- 剑指offer 6.3 知识迁移能力1- 数字在排序数组中出现的次数
- 剑指Offer:面试题38 数字在排序数组中出现的次数
- 【剑指offer】之数字在排序数组中出现的次数
- 【剑指offer】数字在排序数组中出现的次数
- 【剑指offer】题目38 数字在排序数组中出现的次数
- 剑指offer—数字在排序数组中出现的次数
- 剑指offer 面试题38—数字在排序数组中出现的次数
- 【剑指Offer面试编程题】题目1349:数字在排序数组中出现的次数--九度OJ
- 剑指Offer面试题:32.数字在排序数组中出现的次数
- 【剑指Offer学习】【面试题38:数字在排序数组中出现的次数】
- 剑指Offer - 九度1349 - 数字在排序数组中出现的次数
- 剑指offer 38-数字在排序数组中出现的次数
- 剑指offer-38 统计一个数字在排序数组中出现的次数
- 【剑指offer】数字在排序数组中出现的次数
- 【剑指offer】统计一个数字在排序数组中出现的次数
- 【剑指offer 面试题38】数字在排序数组中出现的次数
- [剑指offer] 数字在排序数组当中出现的次数
- 【剑指offer】数字在排序数组中出现的次数
- 剑指offer--数字在排序数组中出现的次数