网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 后端开发 > Java >

剑指offer-1、⼆维数组中的查找

时间:2025-06-06 09:00

人气:

作者:admin

标签:

导读:题目描述 在⼀个⼆维数组中(每个⼀维数组的⻓度相同),每⼀⾏都按照从左到右递增的顺序排序,每⼀列都按照从上到下递增的顺序排序。请完成⼀个函数,输⼊这样的⼀个⼆维数组...

题目描述

在⼀个⼆维数组中(每个⼀维数组的⻓度相同),每⼀⾏都按照从左到右递增的顺序排序,每⼀列都按照从上到下递增的顺序排序。请完成⼀个函数,输⼊这样的⼀个⼆维数组和⼀个整数,判断数组中是否含有该整数。

例⼦,输⼊⼀个数组:

num[3][4] = [
1 , 4 , 6 , 28 ,
2 , 7 , 32 , 30 ,
10 , 11 , 67 , 79
]

需要查找⼀个数字 32 ,则返回 true 。

思路及解答

暴⼒破解

直接暴⼒遍历,最简单,但显然,在最坏的情况下需要遍历完所有的元素才能获取结果。

如果这个数组规模是 n * m ,那么时间复杂度就是 O(n × m) ,没有借助其他的空间,空间复杂度为 O(1) 。

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;

        // 暴力破解:遍历整个二维数组
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                if (matrix[i][j] == target) {
                    return true;
                }
            }
        }

        // 如果遍历完所有元素都没有找到目标值,返回false
        return false;
    }
}
  • 时间复杂度:O(n × m)
  • 空间复杂度: O(1)

⽐较查找法

题目提示了,每⼀⾏都按照从左到右递增的顺序排序,每⼀列都按照从上到下递增的顺序排序,那我们其实就可以利用矩阵的排序特性可以从右上角或左下角开始查找,从而优化搜索效率。

具体来说:从右上角开始:
- 如果当前元素等于目标值,返回 true
- 如果当前元素大于目标值,向左移动一列。
- 如果当前元素小于目标值,向下移动一行。

而如果是从左上角开始找,这种两个方向都更大, 如果从右下角开始找,两个方向都更小,显然无法完成搜索。

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) {
            if (matrix[row][col] == target) {
                return true;
            } else if (matrix[row][col] > target) {
                col--; // 向左移动一列
            } else {
                row++; // 向下移动一行
            }
        }

        // 如果遍历完所有可能的位置都没有找到目标值,返回false
        return false;
    }
}
  • 时间复杂度: O(m + n),其中 m 是行数,n 是列数。
  • 空间复杂度:O(1)

本文来自在线网站:seven的菜鸟成长之路,作者:seven,转载请注明原文链接:www.seven97.top

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信