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

    你可能感兴趣的文章
    poj 1151 (未完成) 扫描线 线段树 离散化
    查看>>
    POJ 1151 / HDU 1542 Atlantis 线段树求矩形面积并
    查看>>
    poj 1163 数塔
    查看>>
    POJ 1177 Picture(线段树:扫描线求轮廓周长)
    查看>>
    Qualitor checkAcesso.php 任意文件上传漏洞复现(CVE-2024-44849)
    查看>>
    POJ 1182 食物链(并查集拆点)
    查看>>
    POJ 1185 炮兵阵地 (状态压缩DP)
    查看>>
    POJ 1195 Mobile phones
    查看>>
    POJ 1228 Grandpa's Estate (稳定凸包)
    查看>>
    poj 1236(强连通分量分解模板题)
    查看>>
    poj 1258 Agri-Net
    查看>>
    quagga 和 zebos
    查看>>
    poj 1286 Necklace of Beads
    查看>>
    POJ 1321 棋盘问题
    查看>>
    poj 1321(回溯)
    查看>>
    Qt高级——Qt元对象系统源码解析
    查看>>
    qt调用vs2008编写的dll动态库(隐式调用)
    查看>>
    Qt读取注册表默认值
    查看>>
    poj 1679 判断MST是不是唯一的 (次小生成树)
    查看>>
    POJ 1703 Find them, Catch them
    查看>>