编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:
每行的元素从左到右升序排列。
每列的元素从上到下升序排列。
一种方法是遍历完所有的数进行判断,但时间复杂度不能接受;另一种方法是对每一行进行二分查找,但时间复杂度仍很高(O(mlogn));
要充分利用行和列都是递增的条件,则考虑从左下角开始搜索(从右上角同理):
若matrix[x][y] == target 则返回;
若matrix[x][y] > target 则x–,去上一行搜索,摒弃x行因为该行后面的元素都更大;
若matrix[x][y] < target 则y++,去右一列搜索,摒弃y列因为该列上面的元素都更小;
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int row = matrix.length;
int col = matrix[0].length;
int x = row - 1, y = 0;
while(x >=0 && y < col) {
if(matrix[x][y] == target) {
return true;
} else if(matrix[x][y] > target) {
x--;
} else {
y++;
}
}
return false;
}
}