二分查找算法题4

/**
     * https://leetcode.cn/problems/search-a-2d-matrix/description/
     *
     * @return*/
    public static boolean hanShu3(int[][] matrix, int target){
                int m = matrix.length;
                int n = matrix[0].length;
                int left = 0;
                int right = m * n - 1;//!!!!
                while (left <= right) {
                    int mid = left + (right - left) / 2;
                    int num = matrix[mid / n][mid % n];//!!!!!
                    if (num == target) {
                        return true;
                    } else if (num < target) {
                        left = mid + 1;
                    } else {
                        right = mid - 1;
                    }
                }
                return false;
    }

在整个矩阵上进行二分查找。通过将二维坐标转化为一维下标来定位元素,从而简化了代码逻辑。首先设置左右指针指向一维数组的头尾位置,然后不断在中间位置进行判断,如果目标值比当前位置的值小,则将右指针移动到中间位置的前一个位置;如果目标值比当前位置的值大,则将左指针移动到中间位置的后一个位置。最终,当左指针大于右指针时,表示查找结束,说明目标值不在矩阵中,返回false。

posted @ 2023-11-09 08:51  超爱彬宝同学  阅读(27)  评论(0)    收藏  举报