关于二分查找的重新梳理 Leetcode704

之前写二分代码的时候总是纠结判断条件,今天把最基础的二分查找题拿出来梳理一下脉络。

class Solution {
    public int search(int[] nums, int target) {
        // 二分法,由于整数除法的舍位性,所以mid是可以取到left的位置,但是取不到right的位置,
        int n = nums.length;
        int left = 0;
        int right = n;  // 所以在设置right的时候,是永远不满足条件的边界值,比如说n是取不到的
        int mid = (left + right) / 2;
        while (left < right) {  // 当left和right就差一位的时候,需要思考怎么才能在简化判断条件的情况下不陷入死循环
            if (nums[mid] == target) 
                return mid;
            else if (nums[mid] < target)
                left = mid + 1; // 而left可以作为target的位置,所以在mid的基础上加了1,同时也为了满足跳出条件
            else 
                right = mid;    // right或是大于target的值,还是取不到的值
            mid = (left + right) / 2;
        }
        return -1;
    }
}