剑指offer_数字在排序数组中出现的次数
来源:互联网 发布:eddie griffin 知乎 编辑:程序博客网 时间:2024/06/08 11:34
题目描述
统计一个数字在排序数组中出现的次数。
解题思路
- 排序数组中查找,利用二分查找
- 改进二分查找,计算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; }}
阅读全文
0 0
- 剑指offer_数字在排序数组中出现的次数
- 剑指offer_数组---数字在排序数组中出现的次数
- 剑指Offer_面试题38_数字在排序数组中出现的次数
- 剑指offer_数组中出现次数超过一半的数字
- 【剑指offer】数字在排序数组中出现的次数
- 剑指offer--数字在排序数组中出现的次数
- 《剑指offer》数字在排序数组中出现的次数
- 剑指offer:数字在排序数组中出现的次数
- 剑指offer-数字在排序数组中出现的次数
- 剑指offer:数字在排序数组中出现的次数
- [剑指offer]数字在排序数组中出现的次数
- 剑指offer 数字在排序数组中出现的次数
- [剑指offer]数字在排序数组中出现的次数
- 剑指offer35--数字在数组排序中出现的次数
- 剑指offer|数字在排序数组中出现的次数
- 剑指offer-数字在排序数组中出现的次数
- 《剑指offer》-数字在排序数组中出现的次数
- 剑指offer - 数字在排序数组中出现的次数
- volatile与内存屏障
- 记工具类
- PopupWindow自定义
- burpsuite 详解
- 找时间要把jenkins发送邮件、模板、权限设置、集成RF要写一写,先记一下免得忘了
- 剑指offer_数字在排序数组中出现的次数
- VS2013常用快捷键(转载)
- [系统装机]如何用UltraISO制作U盘启动盘——图文详解
- Struts2环境搭建--SSH环境搭建--Spring MVC 环境搭建
- 前端涉及的所有知识体系
- 关于命令行解释器shell输入输出重定向的一些理解
- pic操作lcd 模拟spi 9非标准spi 9位数据位
- Leetcode 48 Rotated Image
- SDUT-3930(线段树+状压)