二分法边界一直处理不好?试试防御式编程

二分查找

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

二分法边界一直处理不好?试试防御式编程

二分法有三种模板,大佬总是能灵活运用,但这就苦了我们这些菜鸡。
个人的解决办法就是多判断一下边界,采取防御式编程,这样就只需要记一个模板就好了(雾

import java.util.*;


public class Solution {
    /**
     * 二分查找
     * @param n int整型 数组长度
     * @param v int整型 查找值
     * @param a int整型一维数组 有序数组
     * @return int整型
     */
    public int upper_bound_ (int n, int v, int[] a) {
        // write code here
        int left=0,right=n-1;
        while(left<=right){
            int mid=left+(right-left)/2;
            if(a[mid]<v){
                left=mid+1;
            }else if(a[mid]>=v){
                //如果数组中的第一个元素就大于目标值,那就直接加1返回
                if(mid==0) return mid+1;
                //判断一下是否为第一个大于等于的位置,利用了数组是有序的条件
                if(a[mid-1]>=v) {right=mid-1;}
                else return  mid+1;
            }
        }
        return n+1;
    }
}

总结下来就是,你只需要记住下面这个模板就好,在条件语句中多进行边界判断

int left=0,right=n-1;
while(left<=right){
    int mid=left+(right-left)/2;
    //if....
    //else...
}
全部评论

相关推荐

01-01 23:23
复旦大学 Java
点赞 评论 收藏
分享
点赞 评论 收藏
分享
2025-12-01 15:04
吉首大学 后端工程师
冲鸭2024:亚信不去也罢
投递亚信科技(中国)有限公司等公司8个岗位
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务