【二分查找】LeetCode 74. 搜索二维矩阵思路
题目链接
思路
因为矩阵中每行都按升序排列,且每行的第一个整数大于前一行的最后一个整数。所以整个矩阵其实就是一个大的升序的一维数组,可以使用二分查找的方法对“一维数组”进行搜索,只不过在获取元素的过程中需要进行一步一维索引到二维索引的映射。
代码
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int m = matrix.length, n = matrix[0].length;
// 把二维数组映射到一维
int left = 0, right = m * n - 1;
while(left <= right) {
int mid = (right - left) / 2 + left;
if(get(matrix, mid) == target)
return true;
else if (get(matrix, mid) < target)
left = mid + 1;
else if (get(matrix, mid) > target)
right = mid - 1;
}
return false;
}
// 通过一维坐标访问二维数组中的元素
int get(int[][] matrix, int index) {
int m = matrix.length, n = matrix[0].length;
int i = index / n, j = index % n;
return matrix[i][j];
}
}