时间限制:3秒 空间限制:32768K 热度指数:46596
题目描述
对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。
给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。若该元素出现多次,请返回第一次出现的位置。
测试样例:
[1,3,5,7,9],5,3
返回:1
1 #include <iostream> 2 using namespace std; 3 4 class BinarySearch { 5 public: 6 int getPos(vector<int> A, int n, int val) { 7 // write code here 8 if(A.empty()==true) 9 return -1; 10 11 int start=0; 12 int end=A.size()-1; 13 14 15 while(start<=end) 16 { 17 int mid=(start+end)/2; 18 19 if(val<A[mid]) 20 { 21 end=mid-1; 22 } 23 else if(val>A[mid]) 24 { 25 start=mid+1; 26 } 27 else{ 28 if((mid-1)>=0&&A[mid-1]==val) 29 return mid-1;//重复出现返回第一次出现的位置 30 else 31 return mid; 32 } 33 34 } 35 return -1; 36 37 } 38 };