[去哪儿网]二分查找

时间限制: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 };
原文地址:https://www.cnblogs.com/bxyan/p/6907408.html