普通二分即可,不需要额外if判断

二分查找

http://www.nowcoder.com/questionTerminal/7bc4a1c7c371425d9faa9d1b511fe193

解题思路:
普通二分查找即可接下来,按照流程分情况讨论
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;
    }
全部评论

相关推荐

点赞 评论 收藏
分享
04-30 21:35
已编辑
长安大学 C++
晓沐咕咕咕:评论区没被女朋友好好对待过的计小将可真多。觉得可惜可以理解,毕竟一线大厂sp。但是骂楼主糊涂的大可不必,说什么会被社会毒打更是丢人。女朋友体制内生活有保障,读研女朋友还供着,都准备订婚了人家两情相悦,二线本地以后两口子日子美滋滋,哪轮到你一个一线城市房子都买不起的996清高计小将在这说人家傻😅
点赞 评论 收藏
分享
评论
5
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务