【JZOF】二维数组中的查找

247 阅读1分钟

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

规律:首先先获取数组右上角的数字。如果该数字等于要查找的数字,查找过程结束;

如果该数字大于要查找的数字,剔除这一列,因为该列的所有数字都比它大,向左移动一列,如果该数字小于要查找的数字,剔除这一行,因为该行的所有数字都比它小,向下移动一行。

public class MatrixSearch{


       public static boolean find(int[][] matrix ,int number){
               //考虑程序的鲁棒性,得要处理好可能的输入异常
               if(matrix==null&&matrix.length<1&&matrix[0].length<1){
                      //如果该二维数组没有值
                      return false;
               }
               int rows=matrix.length,cols=matrix.length,row=0,col=cols-1;
               
               while(row<rows&&col>=0){
                    if(matrix[row][col]==number){
                           return true;
                    }else if(matrix[row][col]<number){
                           row++;
                    }else{
                         col--;
                    }
               }
               return false;
        }
}

案例输入输出检测:

public static void main(String[] args) {        int[][] matrix = {                {1, 2, 8, 9},                {2, 4, 9, 12},                {4, 7, 10, 13},                {6, 8, 11, 15}        };        System.out.println(find(matrix, 7));    // 要查找的数在数组中        System.out.println(find(matrix, 5));    // 要查找的数不在数组中        System.out.println(find(matrix, 1));    // 要查找的数是数组中最小的数字        System.out.println(find(matrix, 15));   // 要查找的数是数组中最大的数字        System.out.println(find(matrix, 0));    // 要查找的数比数组中最小的数字还小        System.out.println(find(matrix, 16));   // 要查找的数比数组中最大的数字还大        System.out.println(find(null, 16));     // 健壮性测试,输入空指针

时间复杂度:O(m+n)