喳谍 发表于 2025-6-6 18:41:51

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

题目描述

在⼀个⼆维数组中(每个⼀维数组的⻓度相同),每⼀⾏都按照从左到右递增的顺序排序,每⼀列都按照从上到下递增的顺序排序。请完成⼀个函数,输⼊这样的⼀个⼆维数组和⼀个整数,判断数组中是否含有该整数。
例⼦,输⼊⼀个数组:
num = [
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.length == 0) {
            return false;
      }

      int rows = matrix.length;
      int cols = matrix.length;

      // 暴力破解:遍历整个二维数组
      for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                if (matrix == 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.length == 0) {
            return false;
      }

      int rows = matrix.length;
      int cols = matrix.length;

      // 从右上角开始查找
      int row = 0;
      int col = cols - 1;

      while (row < rows && col >= 0) {
            if (matrix == target) {
                return true;
            } else if (matrix > target) {
                col--; // 向左移动一列
            } else {
                row++; // 向下移动一行
            }
      }

      // 如果遍历完所有可能的位置都没有找到目标值,返回false
      return false;
    }
}

[*]时间复杂度: O(m + n),其中 m 是行数,n 是列数。
[*]空间复杂度:O(1)

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

济曝喊 发表于 2025-10-24 00:44:49

很好很强大我过来先占个楼 待编辑

科元料 发表于 2025-10-26 00:45:56

感谢发布原创作品,程序园因你更精彩

山真柄 发表于 2025-10-29 15:04:41

东西不错很实用谢谢分享

届表 发表于 2025-11-1 05:38:14

前排留名,哈哈哈

抑卞枯 发表于 2025-11-2 17:26:38

谢谢分享,辛苦了

东门清心 发表于 2025-12-1 02:09:47

分享、互助 让互联网精神温暖你我

鞍汉 发表于 2025-12-26 03:43:53

感谢发布原创作品,程序园因你更精彩

扈怀易 发表于 2026-1-14 00:23:37

感谢,下载保存了

赶塑坠 发表于 2026-1-14 15:21:23

前排留名,哈哈哈

戟铵腴 发表于 2026-1-15 13:03:49

不错,里面软件多更新就更好了

轩辕娅童 发表于 2026-1-16 08:58:22

感谢分享,下载保存了,貌似很强大

端木茵茵 发表于 2026-1-16 19:42:50

感谢,下载保存了

石娅凉 发表于 2026-1-18 05:11:27

yyds。多谢分享

梁宁 发表于 2026-1-18 13:05:51

不错,里面软件多更新就更好了

倘伟 发表于 2026-1-18 13:58:38

这个有用。

埤兆 发表于 2026-1-18 15:35:47

分享、互助 让互联网精神温暖你我

蝙俚 发表于 2026-1-20 07:56:57

新版吗?好像是停更了吧。

绘纵 发表于 2026-1-21 13:58:30

很好很强大我过来先占个楼 待编辑

撷监芝 发表于 6 天前

喜欢鼓捣这些软件,现在用得少,谢谢分享!
页: [1] 2
查看完整版本: 剑指offer-1、⼆维数组中的查找