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


    /**
     * 题目:二维数组中的查找
     * 描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
     *   请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
     * 解决方案: 方法一:遍历数组,进行比较  时间复杂度为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 < arr.length &&   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];

    天助自助者
  • 相关阅读:
    VERSIONINFO Resource
    WCF 学习文摘
    hook 学习
    COM 学习
    ActiveX开发
    Word 开发资料集合
    Loops with PL/SQL
    TWain 在 Qt4 中的调用方法
    从 TWAIN 设备中扫描图像
    Qt enum使用总结
  • 原文地址:https://www.cnblogs.com/ZeGod/p/9969296.html
Copyright © 2020-2023  润新知