编写一个高效的算法来搜索 m x n
矩阵 matrix
中的一个目标值 target
。该矩阵具有以下特性:
- 每行的元素从左到右升序排列。
- 每列的元素从上到下升序排列。
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int i=matrix.length-1;
int j=0;
while(i>=0&&j<matrix[0].length){
if(matrix[i][j]<target){
j++;
}
else if(matrix[i][j]>target){
i--;
}
else return true;
}
return false;
}
}
本题的代码不复杂,主要是观察矩阵的结构,以最后一行第一列为基准(此处是第一列中最大值,最后一行的最小值)。因此分为几种情况:(可以看看这个图参考一下)
1.比target大,就把最后一行去掉。(因为后面的数肯定比目前的matrix[i][j]大,更找不到target)
else if(matrix[i][j]>target){
i--;//行去掉
2.比target小,就把第一列去掉。(因为后面列的数会比目前的matrix[i][j]大)
if(matrix[i][j]<target){
j++;//选下一列