解题思路:
普通二分查找即可接下来,按照流程分情况讨论
1.a[mid] >= v:说明满足条件的值在[left,right]区间中
赋值right = mid
2.a[mid] < v:说明满足条件的值在[left+1,right]区间中
赋值left= mid+1
3.结束条件:
left=right:当前左边的所有值小于v,且当前位一定是大于等于v所以直接返回,不需要做其他的判断
public static int upper_bound_ (int n, int v, int[] a) { if(a[n-1] < v)return n+1; int left = 0,right = n-1; while(left < right){ int mid = (left+right)/2; if(a[mid] >= v)right = mid; else left = mid + 1; } return left + 1; }