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

    你可能感兴趣的文章
    ntpdate 通过外网同步时间
    查看>>
    ntpdate同步配置文件调整详解
    查看>>
    NTPD使用/etc/ntp.conf配置时钟同步详解
    查看>>
    NTP及Chrony时间同步服务设置
    查看>>
    NTP服务器
    查看>>
    NTP配置
    查看>>
    NUC1077 Humble Numbers【数学计算+打表】
    查看>>
    NuGet Gallery 开源项目快速入门指南
    查看>>
    NuGet(微软.NET开发平台的软件包管理工具)在VisualStudio中的安装的使用
    查看>>
    nuget.org 无法加载源 https://api.nuget.org/v3/index.json 的服务索引
    查看>>
    Nuget~管理自己的包包
    查看>>
    NuGet学习笔记001---了解使用NuGet给net快速获取引用
    查看>>
    nullnullHuge Pages
    查看>>
    NullPointerException Cannot invoke setSkipOutputConversion(boolean) because functionToInvoke is null
    查看>>
    null可以转换成任意非基本类型(int/short/long/float/boolean/byte/double/char以外)
    查看>>
    Numix Core 开源项目教程
    查看>>
    numpy
    查看>>
    NumPy 或 Pandas:将数组类型保持为整数,同时具有 NaN 值
    查看>>
    numpy 或 scipy 有哪些可能的计算可以返回 NaN?
    查看>>
    numpy 数组 dtype 在 Windows 10 64 位机器中默认为 int32
    查看>>