美文网首页剑指Offer题解
二维数组中的查找

二维数组中的查找

作者: lvlvforever | 来源:发表于2018-07-05 22:12 被阅读9次

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15

最容易想到的就是暴力算法,两层循环依次比较,时间复杂度O(n)。
结合题中给的条件,每一行和每一列是递增有序,我们考虑二分查找和分治算法的思想,通过逐渐缩小范围来降低时间复杂度。
这里注意一下如果我们从左上角开始查找,那么很难去掉部分区域,导致很复杂,如果我们从右上角开始查找,那么每一次比较都可以去掉一部分区域,从而减少问题的规模。
举个例子,查找7,首先和右上角的9比较,7<9,所以需要在前三列查找,这样问题规模就缩小了;然后和8比较,
7<8,所以需要在前两列查找;继续和2比较,7>2,所以需要在前两列中的后三行查找,继续和4比较....直到找到7或者数组越界查找失败。
代码仅供参考。

 public boolean Find(int target, int [][] array) {
         if (array == null || array.length < 1) {
            return false;
          }
        int rows = array.length-1;
        int cols = array[0].length-1;
        int i = 0, j = cols;
        while ( i <= rows && j >= 0 ) {
            int ele = array[i][j];
            if (ele == target) {
                return true;
            } else if (ele < target) {
                i++;
            }else{
                j--;
            }
        }
        return false;
    }

相关文章

  • 算法题

    行列都是有序的二维数组,查找k是否存在【查找法】 二维数组中的查找(行列分别有序数组的二分查找)【递归法】 快速排...

  • 剑指Offer二维数组查找

    剑指Offer二维数组查找 二维数组查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到...

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

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

  • 《剑指offer》(一)-二维数组中的查找(java)

    数组--二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序...

  • 刷题-数组专项

    数组 二维数组中的查找题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每...

  • 二维数组中的查找(Javascript编程) function Find(target, array){ // w...

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

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

  • 数组——二维数组中查找

    一、题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下...

  • LeetCode 每日一题 [39] 二维数组中的查找

    LeetCode 二维数组中的查找 [简单] 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序...

  • 剑指offer(Java版)day01:二维数组中的查找|替换空

    1二维数组中的查找 【题目】在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每...

网友评论

    本文标题:二维数组中的查找

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