博客
关于我
【java】74. 搜索二维矩阵---代码优化,时间复杂度接近O(N)!!!
阅读量:325 次
发布时间:2019-03-04

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

为了高效地判断m×n矩阵中是否存在目标值,我们可以利用矩阵的特殊性质:每行有序递增,且每行的第一个数大于上一行的最后一个数。这种结构使得我们可以通过逐行查找和二分查找来优化搜索过程。

方法思路

  • 逐行检查:首先遍历每一行,逐个检查是否存在目标值。
  • 剪枝处理:对于每一行,先检查该行是否有可能包含目标值。如果当前行的第一个数大于目标值或最后一个数小于目标值,则跳过该行。
  • 二分查找:如果该行有可能包含目标值,则在该行中使用二分查找来确定是否存在目标值。
  • 这种方法充分利用了每行有序的特性,减少了不必要的比较,提高了效率。

    解决代码

    public boolean searchMatrix(int[][] matrix, int target) {    int m = matrix.length;    if (m == 0) return false;    int n = matrix[0].length;    for (int i = 0; i < m; i++) {        int[] row = matrix[i];        if (row[0] > target) {            continue;        }        if (row[n - 1] < target) {            continue;        }        int left = 0;        int right = n - 1;        while (left <= right) {            int mid = (left + right) / 2;            if (row[mid] == target) {                return true;            } else if (row[mid] < target) {                left = mid + 1;            } else {                right = mid - 1;            }        }    }    return false;}

    代码解释

    • 遍历每一行:使用一个循环遍历矩阵的每一行。
    • 剪枝处理:对于每一行,首先检查该行的第一个数是否大于目标值或最后一个数是否小于目标值。如果是,则跳过该行。
    • 二分查找:在可能包含目标值的行中,使用二分查找来确定是否存在目标值。如果找到目标值,返回true;否则继续下一行。
    • 返回结果:如果遍历完所有行后都没有找到目标值,返回false。

    这种方法的时间复杂度为O(m log n),能够高效地处理较大的矩阵。

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

    你可能感兴趣的文章
    PHP 设置调试工具XDebug PHPStorm IDE
    查看>>
    php 身份证号检测
    查看>>
    PHP 输入输出流合集
    查看>>
    PHP 过滤器(Filter)
    查看>>
    php 运算符and or && || 的详解
    查看>>
    php 返回html字符串长度限制,记一次js中和php中的字符串长度计算截取的终极问题和完美...
    查看>>
    php 阿里云oss 上传回调
    查看>>
    PHP 面向对象 final类与final方法
    查看>>
    php+JQ+EasyUI自动加载数据
    查看>>
    php+sql server根据自增序号id区间查询第几条到第几条的数据
    查看>>
    php--正则表达式
    查看>>
    php--防止sql注入的方法
    查看>>
    PHP-CGI Windows平台远程代码执行漏洞复现(CVE-2024-4577)
    查看>>
    php-cgi耗尽报502错误
    查看>>
    php-cgi(fpm-cgi) 进程 CPU 100% 与 file_get_content...
    查看>>
    PHP-DI/Invoker 开源项目使用教程
    查看>>
    php-fpm与Nginx运行常见错误说明
    查看>>
    php-fpm比php成为apache模块好在哪
    查看>>
    php-fpm超时时间设置request_terminate_timeout分析
    查看>>
    php-fpm进程数优化
    查看>>