**题目描述:**编写一个高效的算法来判断?m x n?矩阵中,是否存在一个目标值。该矩阵具有如下特性:
每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。
个人答案:
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int m = matrix.length, n = matrix[0].length;
if(m == 0 || n == 0) {
return false;
}
int l = 0, r = m * n - 1;
while(l < r) {
int mid = l + r >> 1;
if(matrix[mid/n][mid%n] >= target) {
r = mid;
} else {
l = mid + 1;
}
}
if(matrix[r/n][r%n] != target) {
return false;
}
return true;
}
}
问题1
原因:编号转数对公式的错误
正解:假设m * n 的二维矩阵matric中一个数的编号为k,转换成编号的公式为matric[k / n][k % n]
注意:这里一定是对列数取余取模,以上错误是对行数,列数分别取余取模所导致的边界溢出,呜呜呜!
问题2
矩阵matric的行表示为matrix.length,矩阵matric的列表示为matrix[0].length