leecode-3 二位数组中的查找
2020-10-12 本文已影响0人
劝君莫听雨

思路1
暴力破解法
双层循环
时间复杂度为O(n^2) 空间复杂度为O(1)
public boolean findNumberIn2DArray(int[][] matrix, int target) {
if(matrix == null) return false;
for(int i=0;i<matrix.length;i++)
for(int j=0;j<matrix[0].length;j++)
if(matrix[i][j]== target) return true;
return false;
}
思路2
观察矩阵发现左下角,右上角比较特殊
左下角为,这一列的最大值,这一行的最小值。
可以以此作为关键值,消除行,消除列。
时间复杂度为O(n+m),空间复杂度为O(1)
public boolean findNumberIn2DArray(int[][] matrix, int target) {
int i=matrix.length-1; //行数
int j= 0; //列数
while(i>=0 && j<matrix[0].length)
{
if(matrix[i][j] == target) return true;
else if(matrix[i][j]>target) i--;
else j++;
}
return false;
}