题目描述:
①暴力破解:
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
boolean b = false;
Label:for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
if(target==matrix[i][j]){
b=true;
break Label;
}else {
b=false;
}
}
}
return b;
}
}
直接定义双重循环挨个遍历,直到找出或者查找到最后一个。
- 时间复杂度:O(nm)
- 空间复杂度:O(1)O(1)
②从右上角来看,比他小就向左移,比他大就向下移,类似于二叉查找树
class Solution2 {
public boolean findNumberIn2DArray2(int[][] matrix, int target) {
if(matrix==null || matrix.length== 0 || matrix[0].length==0){
return false;
}
int rows=matrix.length,columns=matrix[0].length;
int row=0,column=columns-1;
while(row<rows&&column>=0){
int num=matrix[row][column];
if(num==target){
return true;
}else if(num>target){
column--;
}else {
row++;
}
}
return false;
}
}