博客
关于我
剑指Offer04-二维数组中查找
阅读量:661 次
发布时间:2019-03-15

本文共 1372 字,大约阅读时间需要 4 分钟。

剑指Offer04-二维数组中查找

问题描述

在一个n×m的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

示例:

  • 矩阵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]]
  • 给定target = 5,返回true。
  • 给定target = 20,返回false。

限制:

  • 0 ≤ n ≤ 1000
  • 0 ≤ m ≤ 1000

解题思路

  • 初步判断: 首先检查矩阵是否为空或矩阵的第一行是否为空。如果是,直接返回false。
  • 确定起始位置: 从矩阵的右上角开始查找,因为这是每行的最大值所在的位置。
  • 比较目标值:
    • 如果目标值等于当前位置的值,返回true。
    • 如果目标值大于当前位置的值,那么说明目标值位于当前行的右侧,进入下一行。
    • 如果目标值小于当前位置的值,那么说明目标值位于当前行的左侧,进入上一列。
  • 重复上述步骤,直到行索引超过行数或列索引小于0时,返回false
  • 这种方法充分利用了矩阵的有序性质,能够在较少的查找次数内找到目标值,时间复杂度为O(log n + log m)。

    解决代码

    public class Solution {    public boolean findNumberIn2DArray(int[][] matrix, int target) {        if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {            return false;        }        int rows = matrix.length;        int cols = matrix[0].length;        int row = 0;        int col = cols - 1;        while (row < rows && col >= 0) {            int num = matrix[row][col];            if (num == target) {                return true;            } else if (target > num) {                row++;            } else {                col--;            }        }        return false;    }}

    代码解释

    • 初始检查: 检查矩阵是否为空,避免后续操作。
    • 确定行和列的范围: 从右上角开始查找。
    • 循环查找: 在每次循环中,比较当前位置的值与目标值,决定下一步的行或列索引。
    • 终止条件: 当行索引超过矩阵行数或列索引小于0时,说明目标值不存在,返回false。

    这种方法高效且简洁,能够在较短时间内完成查找任务,适用于大规模的二维数组。

    转载地址:http://yydmz.baihongyu.com/

    你可能感兴趣的文章
    MySQL5.7.18主从复制搭建(一主一从)
    查看>>
    MySQL5.7.19-win64安装启动
    查看>>
    mysql5.7.19安装图解_mysql5.7.19 winx64解压缩版安装配置教程
    查看>>
    MySQL5.7.37windows解压版的安装使用
    查看>>
    mysql5.7免费下载地址
    查看>>
    mysql5.7命令总结
    查看>>
    mysql5.7安装
    查看>>
    mysql5.7性能调优my.ini
    查看>>
    MySQL5.7新增Performance Schema表
    查看>>
    Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
    查看>>
    Webpack 之 basic chunk graph
    查看>>
    Mysql5.7版本单机版my.cnf配置文件
    查看>>
    mysql5.7的安装和Navicat的安装
    查看>>
    mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
    查看>>
    Mysql8 数据库安装及主从配置 | Spring Cloud 2
    查看>>
    mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
    查看>>
    MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
    查看>>
    MYSQL8.0以上忘记root密码
    查看>>
    Mysql8.0以上重置初始密码的方法
    查看>>
    mysql8.0新特性-自增变量的持久化
    查看>>