数组一:二维数组中的查找

时间:2022-06-27 00:25:37

/**
 * 题目:二维数组中的查找
 * 描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
 *   请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
 * 解决方案: 方法一:遍历数组,进行比较  时间复杂度为O(n*k)
 *    方法二:思路:根据这个二维数组的特性,需要找一个临界值,来逐渐批量缩小搜索范围即可降低时间复杂度 O(n+k)(类似于二分查找)
 *         步骤: 对比对角线上的数字,可以缩小范围,
 *       ①从右上角5为当前数开始,进入比较,大于当前数移到下一行,
 *       ②小于当前数移动到前一列
 *       ③等于就返回true
 *         时间复杂度 O(n+k)
 * 实例数组:
 *   1  2  3  4  5
 *   6  7  8  9  10
 *   11 12 13 14 15
 *   16 17 18 19 20
 * */

public class one {

    public static boolean find(int[][] arr,int key) {
        int a = 0;  //行数
        int b = arr[0].length-1; //列数-1 表示 最后一列的位置
        while(a<b &&   b >= 0 ) {
            if(key > arr[a][b]) {  //①从右上角5为当前数开始,进入比较,大于当前数移到下一行,
                a++;
            }else if(key <arr[a][b]){    //②小于当前数移动到前一列
                b--;
            }else {                     //③等于就返回true
                return true;
            }
        }
        return false;
    }
    
    
    
    public static void main(String[] args) {
        int arr[][] = {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20}};
        System.out.println(find(arr, 15));
        System.out.println(find(arr, 25));
        
    }    
}

1.二维数组的length是行数,一维数组length是这一行的长度
2.一维数组的初始化:
  int[] a; a = new int[5];  int[] a ={1,5,6,7};
  int a[]; a = new int[5];
3.二维数组初始化
  ①int a[][] ={{1,2,3,4,5},{7,8,9,5,6}};
  ②int a[][] = new int[2][5];
  ③int a[][];
    a[0] = new int[5];
    a[1] = new int[5];