二分法
lt+rt >> 2
while(lt < rt)
mid < v :: >= 第一个大于等于v
mid > v :: <= 第一个小于等于v
= mid + 1 OR
= mid
class Solution {
public:
/**
* 二分查找 待测试---
* @param n int整型 数组长度
* @param v int整型 查找值
* @param a int整型vector 有序数组
* @return int整型
*/
int upper_bound_(int n, int v, vector<int>& a) {
// write code here
if(v<a[0]||v>a[n-1]){
return n+1;
}
if(v==a[0]){
return 1;
}
int beg=0,end=n,mid=n/2;
while(beg!=end){
mid=(beg+end)>>1;
if(v<a[mid]){
end=mid;
}
else if(v>a[mid]){
beg=mid;
}
else
break;
}
while(v==a[mid]){
mid--;
}
if(v==a[mid+1])
return mid+2;
else
return n+1;
}
};