递归 该版本超时了
public class Solution { public boolean Find(int target, int [][] array) { int len = array.length; if(len ==0) return false; return finda(target,array,len-1,len-1); } public boolean finda(int target, int [][] array, int i, int j){ boolean res = false; if(array[i][j] == target) return true; if(i-1>=0 && array[i-1][j] >=target) res = finda(target,array,i-1,j); if(j-1>=0 && array[i][j-1] >=target) res = finda(target,array,i,j-1); return res; } }
题目所提供的矩阵,是一种特殊的矩阵,称作杨氏矩阵,其有特定的查找算法,时间复杂度m,n分别为矩阵的两个维度。
性质是 左下角的数 比它上面的大 比他右边的小,因此可以用左下角的数判断这一行和这一列
public class Solution { public boolean Find(int target, int [][] array) { int m = array.length; int n = array[0].length; if(m == 0) return false; if(array.length==1 && array[0].length==0) return false; int i = m-1; int j = 0; while(i>=0 && j < n){ if(array[i][j] > target){ i--; }else if(array[i][j] < target){ j++; } else{ return true; } } return false; } }