给定一个排序的整数数组(升序)和一个要查找的整数target
,用O(logn)
的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1
。
样例
在数组 [1, 2, 3, 3, 4, 5, 10]
中二分查找3
,返回2
。
定三个坐标,头坐标,尾坐标,中间坐标,每次判断要查找的数和中间坐标的数比较大小,如果要找的数大于中间数,就让尾坐标=中间数,同时让中间数=(头坐标+尾坐标)/2;直到头坐标和尾坐标相等。
int binarySearch(vector<int> &a, int target) {
int bagin=0,end=a.size()-1,judge=(a.size()/2)-1;
for(int i=0;end>=bagin;i++){
if(target>a[judge]){
bagin=judge+1;
judge=(bagin+end)/2;
}else if(target<a[judge]){
end=judge-1;
judge=(bagin+end)/2;
}else{
while(a[judge]==a[judge-1]){
judge--;
}
return judge;
}
}
return -1;
}