
剑指 Offer 04. 二维数组中的查找
发布日期:2021-05-18 05:02:46
浏览次数:25
分类:精选文章
本文共 2056 字,大约阅读时间需要 6 分钟。
在二维数组中查找特定数字的两种方法
方法一:顺序查找 + 折半查找
思路
在二维数组中查找特定数字,首先需要确定目标数字可能存在的行。根据二维数组的性质,每行都是有序的,因此我们可以通过顺序查找确定目标值可能所在的行。具体来说,只有某一行的最小值小于等于目标值,而最大值大于等于目标值时,目标值才有可能位于该行。找到该行后,可以对该行进行折半查找来快速定位目标值。
代码
class Solution: public: bool findNumberIn2DArray(vector> &matrix, int target) { if (matrix.empty() || matrix[0].empty()) { return false; } for (int i = 0; i < matrix.size(); ++i) { if (matrix[i][0] <= target && matrix[i][matrix[0].size() - 1] >= target) { if (binarySearch(matrix[i], target)) { return true; } } } return false; } bool binarySearch(vector a, int target) { int left, right; left = 0; right = a.size() - 1; while (left <= right) { int mid = (left + right) / 2; if (a[mid] == target) { return true; } else if (a[mid] > target) { right = mid - 1; } else { left = mid + 1; } } return false; }
方法二:基于二叉搜索树的方法
思路
由于二维数组的每一行从左到右是递增的,每一列从上到下也是递增的,因此整个数组可以看作是一个二叉搜索树。右上角是一个特殊的位置,因为它左边的所有元素都小于它,下边的所有元素都大于它。基于这一特性,我们可以从右上角开始搜索,向左或向下移动,直到找到目标值或确定目标值不存在。
代码
class Solution: public: bool findNumberIn2DArray(vector> &matrix, int target) { if (matrix.empty() || matrix[0].empty()) { return false; } int row = 0, column = matrix[0].size() - 1; while (row < matrix.size() && column >= 0) { if (matrix[row][column] == target) { return true; } else if (matrix[row][column] > target) { --column; } else { ++row; } } return false; }
以上两种方法都能高效地在二维数组中查找特定数字,适用于不同的场景。
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年05月06日 15时36分38秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
[Linux] 进程间通信
2019-03-15
[PHP] error_reporting(0)可以屏蔽Fatal error错误
2019-03-15
[操作系统]内存连续分配管理方式
2019-03-15
C++ Primer Plus【复习笔记】-【复合类型】
2019-03-15
thinkphp 的一些重要知识点
2019-03-15
Python基础案例教程
2019-03-15
Java学习第二章——Java基本语句
2019-03-15
形状类似小于等于号的符号是啥
2019-03-15
遇到问题之-yum update无法连接镜像问题解决
2019-03-15
遇到问题之-httpd服务启动报错182行错误
2019-03-15
pycharm如何设置(错误、警告类的标准提醒)
2019-03-15
PHP是世界上最好的语言?Phython第一个不服
2019-03-15
Bugku CTF-web6
2019-03-15
Bugku CTF-web10 头等舱
2019-03-15
UML-配置图
2019-03-15
JS高级面向对象(二)-构造函数和原型
2019-03-15
python入门到秃顶(10):异常
2019-03-15
ES6_变量生明
2019-03-15
考研复试英语问答
2019-03-15