二分查找的一点变形
2012-04-08 21:25
274 查看
题目大意:一个有序的数组,数组内的数字有可能重复,找出某数字在数组中首次出现的位置。
简单说下思路:算是普通二分查找的一个变形吧,普通二分查找找到目的数字就直接返回了,这里需要进一步考虑在找到该数字之后,该数字前面是否还有相同的数,我们只要保存当前位置下标,在其前面范围内进一步查找,如果没有查到相同的数字则最终返回该下标即可,如果有相同的数字则自然会对下标进行更新。
还是用代码来说明问题:
简单说下思路:算是普通二分查找的一个变形吧,普通二分查找找到目的数字就直接返回了,这里需要进一步考虑在找到该数字之后,该数字前面是否还有相同的数,我们只要保存当前位置下标,在其前面范围内进一步查找,如果没有查到相同的数字则最终返回该下标即可,如果有相同的数字则自然会对下标进行更新。
还是用代码来说明问题:
int binearySearch(int key, int buf[], int length) { int start = 0; int end = length - 1; int mid; int res = -1; //未找到则返回 -1 while(start <= end) { mid = (start + end) / 2; if(buf[mid] == key) { res = mid; //暂时保留结果 end = mid - 1; //再进一步进行查找 } else if(buf[mid] < key) { start = mid + 1; } else if(buf[mid] > key) { end = mid - 1; } } return res; }
相关文章推荐
- 二分查找及其变形整理
- 最长上升子序列变形题-二分查找DP
- 二分查找及变形
- 2014-04-04 循环递增数组查找元素(二分变形思想,百度面试题)
- 你真的能搞定二分查找吗 — 二分查找及变形
- 二分查找变形
- 面试题_二分查找及其变形
- 一种二分查找变形
- 二分查找 变形
- 二分查找及其变形总结
- 每天学一点算法-二分查找算法
- 51nod 1279 扔盘子 (二分查找的变形)
- 二分查找的变形应用
- 变形的二分查找
- 二分查找及其几个变形
- [二分查找变形]弯曲的木杆(POJ 1905)
- Search a 2D Matrix,在有序矩阵查找,二分查找的变形; 行有序,列有序查找。
- 二分查找及其变形
- 二分查找及其变形
- Find Peak Element——二分查找的变形