class BinarySearch { public: int getPos(vector<int> A, int n, int val) { int left=0,right=n-1; while(left<=right) { int mid=left+(right-left)/2; if(A[mid]>val) right=mid-1; else if(A[mid]<val) left=mid+1; else if(A[mid]==val) right=mid-1; // 关键在于找到一个(此时不一定是左边界)后怎么做. 找到一个后继搜索左边(将右边界左移).此时有两种情况:1.只有一个元素, 这时候执行right=mid-1, 跳出循环, 我们判定left,不影响;2. 不止一个元素, 最后都会到有两个元素的情况-> 比如如果最后出现一个 1,3 的情况, 再循环一次就是判定 1 了, 因为mid=左边那个 } if(left<0||left>=A.size()) { return -1; } return A[left]=val?left:-1; } };