博客
关于我
剑指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/

    你可能感兴趣的文章
    mysql中having的用法
    查看>>
    MySQL中interactive_timeout和wait_timeout的区别
    查看>>
    mysql中int、bigint、smallint 和 tinyint的区别、char和varchar的区别详细介绍
    查看>>
    mysql中json_extract的使用方法
    查看>>
    mysql中json_extract的使用方法
    查看>>
    mysql中kill掉所有锁表的进程
    查看>>
    mysql中like % %模糊查询
    查看>>
    MySql中mvcc学习记录
    查看>>
    mysql中null和空字符串的区别与问题!
    查看>>
    MySQL中ON DUPLICATE KEY UPDATE的介绍与使用、批量更新、存在即更新不存在则插入
    查看>>
    MYSQL中TINYINT的取值范围
    查看>>
    MySQL中UPDATE语句的神奇技巧,让你操作数据库如虎添翼!
    查看>>
    Mysql中varchar类型数字排序不对踩坑记录
    查看>>
    MySQL中一条SQL语句到底是如何执行的呢?
    查看>>
    MySQL中你必须知道的10件事,1.5万字!
    查看>>
    MySQL中使用IN()查询到底走不走索引?
    查看>>
    Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
    查看>>
    MySql中关于geometry类型的数据_空的时候如何插入处理_需用null_空字符串插入会报错_Cannot get geometry object from dat---MySql工作笔记003
    查看>>
    mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
    查看>>
    mysql中出现Unit mysql.service could not be found 的解决方法
    查看>>