美文网首页
算法-4.二维数组中查找对应的数字

算法-4.二维数组中查找对应的数字

作者: zzq_nene | 来源:发表于2020-08-07 14:20 被阅读0次

    二维数组:
    [
    [1, 4, 7, 11, 15],
    [2, 5, 8, 12, 19],
    [3, 6, 9, 16, 22],
    [10, 13, 14, 17, 24],
    [18, 21, 23, 26, 30]
    ]

    方式一

    根据二维数组的最右上角为一个开始点,开始查找,判断需要查找的数字是大于当前位置上的数字还是小于,如果是大于,则向下查找,行数加1;如果是小于则向左查找,列数减1
    从二维数组中查找对应的数字,判断是否存在

        /**
         * 二维数组中查找对应的数字是否存在
         * 二位数组中从左到右数字增大
         * 从上到下数字增大
         * @param target
         * @param array
         * @return
         */
        public static boolean find(int target, int[][] array) {
            if (array.length == 0 || array[0].length == 0) {
                return false;
            }
            int m = array[0].length - 1;// 列
            int n = 0;// 行
            int temp = array[n][m];// 第0行的最后一个
            while (target != temp) {
                if (m > 0 && n < array.length - 1) {
                    // 如果需要查找的target大于当前找到的temp,则向下继续查找
                    // 行数加1
                    if (target > temp) {
                        n = n + 1;
                    } else if (target < temp) {
                        // 如果需要查找的target小于当前找到的temp,则向左边查找
                        // 列数减1
                        m = m - 1;
                    }
                    temp = array[n][m];
                } else {
                    return false;
                }
            }
            return true;
        }
    

    方式二

    遍历每一行,然后对每一行使用二分查找法。时间复杂度为O(nlogn)
    二分查找的时间复杂度为O(logn),前提是有序的时候

        public static boolean find1(int target, int[][] array) {
            if (array.length == 0 || array[0].length == 0) {
                return false;
            }
    
            // 遍历每一行
            for (int i = 0; i < array.length; i++) {
                int low = 0;
                int height = array[i].length - 1;
                int mid = (low + height)/2;
                while (low<=height) {
                    if (array[i][mid] > target) {
                        height = mid - 1;
                    } else if (array[i][mid] < target) {
                        low = mid + 1;
                    } else {
                        return true;
                    }
                }
             }
            return false;
        }
    

    相关文章

      网友评论

          本文标题:算法-4.二维数组中查找对应的数字

          本文链接:https://www.haomeiwen.com/subject/xsllrktx.html