编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。
提示:
m == matrix.lengthn == matrix[i].length0 <= m, n <= 100-104 <= matrix[i][j], target <= 104
进阶应该是这道题240. 搜索二维矩阵 II。
解法一
class Solution {
public boolean searchMatrix(int[][] matrix
, int target
) {
int m
= matrix
.length
;
if (m
== 0) return false;
int n
= matrix
[0].length
;
if (n
== 0) return false;
int left
= 0, right
= m
* n
- 1;
while (left
< right
) {
int mid
= left
+ (right
- left
) / 2;
if (matrix
[mid
/ n
][mid
% n
] < target
) {
left
= mid
+ 1;
} else {
right
= mid
;
}
}
return matrix
[left
/ n
][left
% n
] == target
;
}
}
解法二
class Solution {
public boolean searchMatrix(int[][] matrix
, int target
) {
int col
= matrix
.length
;
if (col
== 0) return false;
int row
= matrix
[0].length
;
if (row
== 0) return false;
int h
= 0, w
= row
- 1;
while (h
< col
&& w
>= 0) {
if (matrix
[h
][w
] > target
) {
w
--;
} else if (matrix
[h
][w
] < target
) {
h
++;
} else {
return true;
}
}
return false;
}
}