【剑指offer】之数字在排序数组中出现的次数
2015-12-07 11:26
337 查看
题目描述:统计一个数字在排序数组中出现的次数。
分析:
用二分查找法找出数字第一次出现的位置和最后一次出现的位置,两个位置相减。
java代码实现:
测试:
题目描述:统计一个数字在排序数组中出现的次数。
分析:
用二分查找法找出数字第一次出现的位置和最后一次出现的位置,两个位置相减。
java代码实现:
//统计出现的次数 private static int getNumber(int[]nums,int k) { int firstindex = findFirst(nums,0,nums.length-1,k); int lastindex = findlast(nums,0,nums.length-1,k); return lastindex-firstindex+1; } private static int findFirst(int []nums,int start ,int end,int targetNumber) { int middle = (start + end) / 2; if(nums[middle] == targetNumber) { if(middle == 0 ||(nums[middle-1]!=targetNumber && middle>0)) { return middle; } else { end = middle - 1; } } if(nums[middle] >= targetNumber) end = middle -1; else start = middle + 1; return findFirst(nums,start ,end,targetNumber) ; } private static int findlast(int []nums,int start ,int end,int targetNumber) { int middle = (start + end) / 2; if(nums[middle] == targetNumber) { if(middle == nums.length-1 ||(nums[middle+1]!=targetNumber && middle<nums.length-1)) { return middle; } else { start = middle + 1; } } if(nums[middle] <= targetNumber) start = middle +1; else end = middle - 1; return findlast(nums,start ,end,targetNumber) ; }
测试:
public static void main(String[] args) throws FileNotFoundException { int [] numbers = {1,2,3,3,3,3,4,5}; System.out.println(getNumber(numbers,3)); }输出:4
相关文章推荐
- js "类"概念的简单认识
- The new features in Windows Server 2012 Hyper-V
- AngularJs教程(二)
- js删除数组中某一项或几项的几种方法
- echarts.js
- AngularJS展示数据的ng-bind指令和{{}} 区别
- jsp获取websocket的远程服务器地址
- psd页面切割成html技巧总结
- MINA源码笔记(二)IoBuffer的封装
- jquery动态添加div
- css3动画效果
- Nodejs学习之一 下载安装与部署nodejs
- an important difference between while and foreach on Perl
- jackson 通用解析json方法
- React js 入门总结
- arcgis for javascript常用方法
- 8个3D视觉效果的HTML5动画欣赏
- JavaScript的History API使搜索引擎抓取AJAX内容
- 多选下拉框 jquery.multiple.select的使用
- 给extjs类添加默认属性