二分查找法

147 阅读1分钟

LeetCode例题: leetcode-cn.com/problems/qu…

二分查找代码大致如下:

        int i = 0,
        //写成这样,相当于搜索区间为[begin, end],这是一个闭区间
        j = nums.length - 1;
        //重点: 因为闭区间,所以到了begin等于end时,其实区间内还有一个值要判断, 
        //因此只begin>end的时候才能停止
        while(i<=j){
            //位运算,无符号右移一位,同(i+j)/2
            int m = (i+j) >> 1;
            // 如果下标位置和二分出来的数据一样则位置加+,重新开始计算
            if(nums[m] == m){
                i = m + 1;
            } else {
                j = m - 1;
            }
        }
        // 返回对应的下标
        return i;