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

    你可能感兴趣的文章
    PHP实现微信公众号H5支付
    查看>>
    PHP实现微信公众号网页授权
    查看>>
    PHP实现微信小程序推送消息至公众号
    查看>>
    rabbitmq逻辑与开发
    查看>>
    php实现根据身份证获取年龄
    查看>>
    PHP实现的MongoDB数据增删改查
    查看>>
    PHP实现的SSO单点登录系统,拿走就用吧
    查看>>
    php实现短信验证功能
    查看>>
    RabbitMQ连接报错(1)—— None of the specified endpoints were reachable
    查看>>
    php实现逆转数组
    查看>>
    PHP实现通过geoip获取IP地理信息
    查看>>
    PHP实现页面静态化、纯静态化及伪静态化
    查看>>
    php容许ajax跨域,PHP设置允许ajax跨域请求的两种常见方法
    查看>>
    RabbitMQ进程结构分析与性能调优
    查看>>
    PHP对接百度地图
    查看>>
    PHP对表单提交特殊字符的过滤和处理
    查看>>
    php对象引用和析构函数的关系
    查看>>
    RabbitMQ HTTP 认证后端项目常见问题解决方案
    查看>>
    PHP将图片转换成base64格式(优缺点)
    查看>>
    php将多个值的数组去除重复元素
    查看>>