递归 该版本超时了

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;
    }
}