美文网首页
算法-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.二维数组中查找对应的数字

    二维数组:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, ...

  • iOS-算法集锦-剑指offer-百题详解之一

    目录 1. 前言 2. 实现 Singleton 3. 数组中重复的数字 4. 二维数组中的查找 5. 替换空格 ...

  • 剑指offer题解

    前言 2. 实现 Singleton 3. 数组中重复的数字 4. 二维数组中的查找 5. 替换空格 6. 从尾到...

  • 剑指offer【03~09】

    题目链接: 剑指offer 03-09 目录: 3. 数组中重复的数字4. 二维数组中的查找5. 替换空格6. 从...

  • 剑指offer4.二维数组中的查找

    题目 题目分析 算法-二维数组中的查找 比如一个二维数组是这样: 要查找数组7在不在数组内,根据前人总结出来的规律...

  • 剑指Offer 练习

    剑指Offer 算法练习 03.数组中重复的数字 04.二维数组的查找 05.替换空格 06.从尾到头打印链表 0...

  • 1. 数组与矩阵

    [toc] 3. 数组中重复的数字 思路:数组数字范围为1-n,统计count[num]即可 4. 二维数组中的查...

  • 牛客网高频算法题系列-BM18-二维数组中的查找

    牛客网高频算法题系列-BM18-二维数组中的查找 题目描述 在一个二维数组array中(每个一维数组的长度相同),...

  • 剑指offer

    面试题3——数组中重复的数字 使用LinkedHashMap,有序存放。 面试题4——二维数组中的查找 首先选...

  • 剑指Offer(一)

    题目汇总03.数组中重复的数字(简单),本题考查数组04.二维数组中的查找(简单),本题考查数组05.替换空格,本...

网友评论

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

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