递归 该版本超时了
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;
}
}


京公网安备 11010502036488号