• 二分查找的那些坑


    听说很多人写不对二分查找,如果不好好总结一下,我大概也会是其中之一。。

    历史上二分查找的bug

    二分查找虽然原理很简单,实现起来却有很多的坑。
    Algorithms - Coursera
    《编程珠玑》的作者做实验发现90%的人写不对二分查找,然后亲手在该书里写下一个带 bug 的 binary search... 据说该 bug 在书里呆了二十年没人发现,而这本书还是一本人人交手称赞的好书。
    然后 java 标准库里,一个和《编程珠玑》同样的 bug 在 2006 年才被发现。。
    那这个 bug 是啥呢?是一个很好理解的问题:整数溢出

    public static int binarySearch(int[] nums, int target, int lo, int hi){
        while(lo <= hi){
            int mid = lo + (hi - lo) / 2;
            // int mid = (lo + hi) / 2;         // the bug one
            if(nums[mid] == target) return mid;
            
            if(nums[mid] > target) hi = mid - 1;
            else                lo = mid + 1;
        }
    
        return -1;
    }
    

    要写好这东西,关键是两点,一个是边界的缩减,一个是那句可能会导致溢出的语句。
    顺手再上leetcode刷两道二分查找题,巩固一下。。

    参考

  • 相关阅读:
    响应式布局
    CSS3过渡
    CSS3背景
    CSS渐变
    CSS3选择器
    CSS3
    自定义指令
    键盘修饰符
    过滤器
    v-if与v-show区别
  • 原文地址:https://www.cnblogs.com/kirito-c/p/9026669.html
Copyright © 2020-2023  润新知