二维数组中的查找

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)。其中 M 为行数,N 为 列数。

该二维数组中的一个数,小于它的数一定在其左边,大于它的数一定在其下边。因此,从右上角开始查找,就可以根据 target 和当前元素的大小关系来快速地缩小查找区间,每次减少一行或者一列的元素。当前元素的查找区间为左下角的所有元素。


public boolean Find(int target, int[][] matrix) {
    if (matrix == null || matrix.length == 0 || matrix[0].length == 0)
        return false;
    int rows = matrix.length, cols = matrix[0].length;
    int r = 0, c = cols - 1; // 从右上角开始
    while (r <= rows - 1 && c >= 0) {
        if (target == matrix[r][c])
            return true;
        else if (target > matrix[r][c])
            r++;
        else
            c--;
    }
    return false;
}

相关推荐

  1. 数组查找

    2024-07-18 11:28:03       53 阅读
  2. 剑指offer面试题3 数组查找

    2024-07-18 11:28:03       47 阅读
  3. 力扣【剑指offer】数组查找

    2024-07-18 11:28:03       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 11:28:03       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 11:28:03       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 11:28:03       62 阅读
  4. Python语言-面向对象

    2024-07-18 11:28:03       72 阅读

热门阅读

  1. Servlet 文件上传

    2024-07-18 11:28:03       22 阅读
  2. MQTT 协议的优势

    2024-07-18 11:28:03       20 阅读
  3. oracle 经营范围 设计

    2024-07-18 11:28:03       25 阅读
  4. VDI 和 DaaS 的区别

    2024-07-18 11:28:03       22 阅读
  5. react + pro-components + ts完成单文件上传和批量上传

    2024-07-18 11:28:03       25 阅读
  6. MongoDB 基本查询语句

    2024-07-18 11:28:03       22 阅读
  7. ubuntu 源码安装postgresql16.0

    2024-07-18 11:28:03       24 阅读
  8. 【Tomcat9正确配置server.xml请求头信息】

    2024-07-18 11:28:03       20 阅读
  9. MYSQL设计索引一般需要考虑哪些因素?

    2024-07-18 11:28:03       24 阅读
  10. 华为OD机考题(典型题回顾)

    2024-07-18 11:28:03       20 阅读