您的位置:首页 > 其它

Search a 2D Matrix

2017-01-06 19:37 211 查看

1.题目

写出一个高效的算法来搜索 m × n矩阵中的值。

这个矩阵具有以下特性:

每行中的整数从左到右是排序的。
每行的第一个数大于上一行的最后一个整数。

[
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]

给出
target = 3
,返回
true


2.算法

我们对行和列进行二分查找,找到为true

public boolean searchMatrix(int[][] matrix, int target) {
// write your code here
if (matrix == null || matrix.length ==0 || matrix[0].length == 0) {
return false;
}
int l = 0;
int r = matrix.length - 1;
while (l <= r) {
int m = (l + r) / 2;
if (matrix[m][0] == target) {
return true;
} else if (matrix[m][0] > target) {
r = m - 1;
}else {
l = m + 1;
}
}
int row = r; //r不会大于matrix.length - 1,可能小于0
if (row < 0) {
return false;
}
l = 0;
r = matrix[row].length - 1;
while (l <= r) {
int m = (l + r) / 2;
if (matrix[row][m] == target) {
return true;
} else if (matrix[row][m] > target) {
r = m - 1;
}else {
l = m + 1;
}
}
return false;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: