二分查找-lintcode
2016-04-13 23:49
393 查看
给定一个排序的整数数组(升序)和一个要查找的整数
在数组
比较简单,主要要处理target出现多次的情况。
target,用
O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回
-1。
在数组
[1, 2, 3, 3, 4, 5, 10]中二分查找
3,返回
2。
比较简单,主要要处理target出现多次的情况。
class Solution { public: /** * @param nums: The integer array. * @param target: Target number to find. * @return: The first position of target. Position starts from 0. */ int binarySearch(vector<int> &array, int target) { // write your code here int left = 0; int right = array.size()-1; while(left<=right){ int mid = (right+left)/2; if(target<array[mid]) right = mid-1; else if (target>array[mid]) left = mid +1; else{ //处理出现有多个target的情况。 int j = mid; for(;j>=0&&array[j]==target;j--) ; return j+1; } } return -1; } };
相关文章推荐
- 1.1.1 Linux是什么
- Android Studio 引用jar和 so 文件
- 理解TimesTen中两个CheckPoint文件与Trans Log的关系及其原理
- 21_锁屏和恢复出厂设置
- ReactNative学习十八-Text/Image属性与风格
- WAMP集成环境
- 《Linux内核分析》课程第八周学习总结
- 二分搜索的java源码实践
- 20_读取播放音效
- 中介者模式
- TimesTen内存数据库体系结构
- 19_读取短信内容
- Android自定义控件2-简单的写字板控件
- 18_开机广播
- 17_使用设备管理器
- for循环的小技巧
- intellij idea蓝屏重启后代码到处报错解决方法
- OSChina 周四乱弹 ——霍金!你要真挑起来星球大战,放学你等着!
- 16_获取联系人信息
- spring 与 jsf整合