二维数组中的查找
来源:互联网 发布:飞鹰网络电视手机版 编辑:程序博客网 时间:2024/05/22 10:54
题目
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
当我们需要解决一个复杂的问题时,一个很有效的办法就是从一个具体的问题入手,通过分析简单具体的例子,试图寻找普遍规律。针对这个问题,我们不妨也从题目给出的例子入手。
首先我们选取右上角的数字9。由于9大于7,并且9还是第四列中最小的数字,因此7不可能出现在第四列。于是,我们把这一列从需要考虑的区域内剔除。在剩下的矩阵中,位于右上角的数字是8。同样8大于7,因此8所在的列我们也可以剔除。
在剩余的两列中, 2位于右上角,2小于7,那么要查找的7只可能在2的下边。于是我们把2所在的行也剔除。在剩下的矩阵中,4位于右上角,和前面一样,我们把数字4所在的行也剔除。
在剩下的2*2矩阵中,位于右上角的恰好就是我们要查找的数字7,于是查找过程就可以结束了。
总结上述查找过程,可以发现:首先选取数组右上角的数字。如果该数字等于要查找的数字,查找过程结束;如果该数字大于要查找的数字,剔除该数字所在的列;如果该数字小于要查找的数字,则剔除该数字所在的行。直到找到要查找的数字,或者要查找的范围为空。
bool Find(vector<vector<int> > array, int target) { bool found = false; if (!array.empty()) { int rows = array.size(); int cols = array[0].size(); if (rows > 0 && cols > 0) { int row = 0; int col = cols - 1; while (row < rows && col >= 0) { if (array[row][col] == target) { found = true; break; } else if (array[row][col] > target) --col; else ++row; } } } return found;}
0 0
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- Java-day02基础语法
- SOUI GDI+渲染引擎下的字体特效
- C语言使用回调函数解决内存申请和释放的问题
- 20个数据库设计最佳实践
- NGUI制作字体的三种方法
- 二维数组中的查找
- eclipse 启动失败
- Android微信文件分享
- image soure相机的snap采图方式
- 设计模式(9)--Proxy代理模式
- 自定义URL Scheme
- COALESCE()函数
- DBUtils详细介绍+实例
- 空包的签名方法