[LeetCode Hot 100] LeetCode74. 搜索二维矩阵
题目描述
思路:二维矩阵坐标变换 + 二分查找
二维矩阵坐标变换:
只要知道二维数组的的行数m和列数n,二维数组的坐标 (i, j) 可以映射成一维的index = i * n + j;反过来也可以通过一维index反解出二维坐标 i = index / n,j = index % n。(n是列数)
把二维数组matrix的元素访问抽象成在一维数组中访问元素,然后直接施展最基本的二分搜索即可。
方法一:
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
if (matrix == null || matrix.length == 0) return false;
int m = matrix.length, n = matrix[0].length;
int left = 0, right = m * n - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (target == get(matrix, mid)) {
return true;
} else if (target < get(matrix, mid)) {
right = mid - 1;
} else if (target > get(matrix, mid)) {
left = mid + 1;
}
}
return false;
}
// 通过一维坐标访问二维数组中的元素
private int get(int[][] matrix, int index) {
int n = matrix[0].length;
// 计算坐标
int i = index / n, j = index % n;
return matrix[i][j];
}
}
本文作者:Ac_c0mpany丶
本文链接:https://www.cnblogs.com/keyongkang/p/17918676.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步