题目:给定一个排序的整数数组(升序)和一个要查找的整数target
,用O(logn)
的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1
。
样例
在数组 [1, 2, 3, 3, 4, 5, 10]
中二分查找3
,返回2
。
挑战
如果数组中的整数个数超过了2^32,你的算法是否会出错?
解:标准的二分查找
注意,最后一个else即找到target,但是target的值在数组中有多个,应返回下标最小的一个(else里的while实现这一效果)。
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 hi=array.size(); int mid,low; low=0,mid=(hi+low)/2; while(low<=hi) { if(target>array[mid]) { low=mid+1; } else if(target<array[mid]) { hi=mid-1; }else { while(mid-1>=0&&array[mid-1]==array[mid]) { mid=mid-1; } return mid; } mid=(hi+low)/2; } return -1; } };