intgetPos(vector<int>A,intn,intval)intleft=0;intright=n-1;intindex=n;while(left<=right){intmid=(left+right)/2;if(A[mid]==val){if(mid<index)index=mid;right=mid-1;}elseif(A[mid]>val)right=mid-1;elseif(A[mid]<val)left=mid+1;}if(index!=n)returnindex;elsereturn-1;//writecodehere}

如上述代码所示,二分查找主要是控制左右两个指针的递进关系。第一个注意事项是:while循环必须是left<=rigtht,而不是left<right,否则无法处理第一个数字即为要查找数字这种情况。其次,在找到的时候,还要再判断一下是否前面有相同的关键字,以确保要查找的数字即为第一次出现的数字。