数字在排序数组中出现的次数
2016-06-23 22:39
302 查看
题目
统计一个数字在排序数组中出现的次数。解题
方法一:暴力线性遍历
方法二:二分法
分别求出左右边界
public class Solution { public int GetNumberOfK(int [] array , int k) { if(array == null|| array.length==0) return 0; int low = 0; int high = array.length -1; int l = left(array,low,high,k); if(l ==-1) return 0; int r = right(array,l,high,k); return r-l + 1; } // 求左边界 public int left(int[] array,int low ,int high,int k){ if(array[low] == k) return low; while(low <= high){ int mid = low + (high - low)/2; if(mid >=1 && array[mid-1]!=k && array[mid] ==k) // mid - 1越界要判断 return mid; if(array[mid] >=k){ // 考虑等于 high = mid - 1; }else { low = mid + 1; } } return -1; } // 求右边界 public int right(int[] array,int low ,int high,int k){ if(array[high] == k) return high; while(low <= high){ int mid = low + (high - low)/2; if(mid + 1 < array.length && array[mid]==k && array[mid+1] !=k) // mid + 1越界要判断 return mid; if(array[mid] >k){ high = mid - 1; }else { // 等于在这里考虑 low = mid + 1; } } return -1; } }
当然也可以求出一个边界,然后再线性查找
相关文章推荐
- 前端插件集合
- Python+Selenium进行UI自动化测试项目中,常用的小技巧4:日志打印,longging模块(控制台和文件同时输出)
- [android] android项目架构
- reactjs+echarts实现绘图
- 机器学习中的数据清洗与特征处理综述
- 手把手教你视频直播开发
- Eclipse Neon发布!
- java mail使用qq邮箱发邮件的配置方法
- leetcode 109 Convert Sorted List to Binary Search Tree
- github上传代码
- StringBuffer的capacity()方法
- Eclipse java swing 开发环境
- 问题 E: 交集
- JDBC代码
- Scrapy之日志文件的产生
- 远程过程调用RPC
- A星寻路
- 算法基础:排序与查找
- 数据库的各种语句
- SEO工程实施流程、计划、规范