Jex

二分查找算法套路

来源:https://blog.igevin.info/posts/common-binary-search/
仅为学习记录所用

二分查找算法的思想很容易理解:对于一个排好序的数组,通过检查数组中间位置元素值与 target 的大小,缩小数组的长度范围,直到找到 target,或达到循环退出条件后,做进一步判断并返回结果。
其代码框架如下:

public int binarySearch(int[] nums, int target) {
    int left = ..., right = ...;
    while(...) {
        int mid = (left + right) / 2;
        if(nums[mid] == target) {
            ...
        } else if (nums[mid] > target) {
            right = ...;
            ...
        } else if (nums[mid] < target) {
            left = ...;
            ...
        }
    }
}

二分查找容易出错的地方,是上述代码中省略号处应该怎么写才合适,比如到底是<=还是<,是left = mid 还是left = mid + 1,是right = mid还是right = mid - 1等,正确的写法是这几个语句恰当的组合,否则都没法通过全部用例测试。