4、二维数组中的查找

二维数组中的查找

一:题目描述

给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。给定一个数,判断这个数是否在该二维数组中

Consider the following matrix:
[
  [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]
]

Given target = 5, return true.
Given target = 20, return false.

要求时间复杂度 O(M + N),空间复杂度 O(1)。

二:思路

由题目我们不难发现,该二维数组中的任意一个数一定大于该数的左边的数字,一定小于下面的数字,例如数据16,一定大于9,小于17。
所以根据这个规律我们可以有以下思路:

  1. 从二维数组的最右上端的数据开始,也就是array[0][array[0].lenght-1];
  2. 当待查找数据比当前数小,则向左变移动,然后再次判断
  3. 当待查数据比当前数据大,则向下移动,然后再次判断
  4. 当待查数据与当前数据相同,证明找到数据。
    详细过程

三:代码

  /*
        思路:
            从二维数组的最右上端开始判断,如果寻找数比当前数小向左移动,
            再次比较,若大,向下移动,
     */

    public static boolean findValue(int[][] array,int value){
        //首先判断是否符合标准
        if (array == null || array.length<=0||array[0].length<=0){
            return false;
        }

        int r = 0;
        int d = array[0].length-1;    //列数

        //从二维数组的右上角开始判断查找
        while (r<=array.length-1&&d>=0){
            //如果正好相等
            if (value == array[r][d]){
                return true;
            }else if (value<array[r][d]){
                //行数不变,列数变
                d--;
            }else if (value > array[r][d]){
                //列数不变,行数变
                r++;
            }
        }
        return false;
    }

发布了24 篇原创文章 · 获赞 5 · 访问量 2058

猜你喜欢

转载自blog.csdn.net/weixin_43288447/article/details/104227190
今日推荐