美文网首页
如何优雅地写二分搜索

如何优雅地写二分搜索

作者: RiceCake1122 | 来源:发表于2020-02-19 18:30 被阅读0次

    二分搜索大家都会,但是一般我们都是采用闭区间[a,b]的方式来进行搜索,并且循环条件一般是left <= right。但是这种方式需要考虑的边界条件比较多,这里推荐二分搜索最好采用半开区间[a,b)判断的方式,也就是说如果数组大小为n,那初始的left设为0,right设为n。以下代码足够简洁,并且可以返回第一个大于等于target的数的index:

    private int binarySearch(int[] arr, int target) {
            int left = 0, right = arr.length;    // 注意这个初始right设为数组长度
            while (left < right) {
                // 推荐采用这种方式取mid,而不是 mid = (left + right) / 2,因为后者可能会导致溢出
                int mid = left + (right - left)/2; 
                if (arr[mid] < target)
                    left = mid+1;
                else right = mid;
            }
            return left;  // 这里不需要考虑返回left还是right,因为最终left总是等于right
        }
    

    相关文章

      网友评论

          本文标题:如何优雅地写二分搜索

          本文链接:https://www.haomeiwen.com/subject/mztzfhtx.html