二分查找算法题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。