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

    你可能感兴趣的文章
    OSPF技术连载15:OSPF 数据包的类型、格式和邻居发现的过程
    查看>>
    OSPF技术连载16:DR和BDR选举机制,一篇文章搞定!
    查看>>
    OSPF技术连载17:优化OSPF网络性能利器——被动接口!
    查看>>
    OSPF技术连载18:OSPF网络类型:非广播、广播、点对多点、点对多点非广播、点对点
    查看>>
    OSPF技术连载19:深入解析OSPF特殊区域
    查看>>
    SQL Server 复制 订阅与发布
    查看>>
    OSPF技术连载20:OSPF 十大LSA类型,太详细了!
    查看>>
    OSPF技术连载21:OSPF虚链路,现代网络逻辑连接的利器!
    查看>>
    OSPF技术连载22:OSPF 路径选择 O > O IA > N1 > E1 > N2 > E2
    查看>>
    OSPF技术连载2:OSPF工作原理、建立邻接关系、路由计算
    查看>>
    OSPF技术连载5:OSPF 基本配置,含思科、华为、Junifer三厂商配置
    查看>>
    OSPF技术连载6:OSPF 多区域,近7000字,非常详细!
    查看>>
    OSPF技术连载7:什么是OSPF带宽?OSPF带宽参考值多少?
    查看>>
    OSPF技术连载8:OSPF认证:明文认证、MD5认证和SHA-HMAC验证
    查看>>
    OSPF故障排除技巧
    查看>>
    spring配置文件中<context:property-placeholder />的使用
    查看>>
    OSPF有哪些优势?解决了RIP的什么问题?
    查看>>
    OSPF理论
    查看>>
    OSPF的七种类型LSA
    查看>>
    OSPF的安全性考虑:全面解析与最佳实践
    查看>>