二维数组中的查找
2016-02-16 15:52
351 查看
题目
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。当我们需要解决一个复杂的问题时,一个很有效的办法就是从一个具体的问题入手,通过分析简单具体的例子,试图寻找普遍规律。针对这个问题,我们不妨也从题目给出的例子入手。
首先我们选取右上角的数字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; }
相关文章推荐
- 让图片跳跃起来 javascript图片轮播特效
- zabbix_agentd_window端运行报错cannot connect to Service Manager: [0x00000005]
- 如何设置Launch Image启动图片
- C语言使用回调函数解决内存申请和释放的问题
- eclipse 启动失败
- RPC原理详解
- Spring MVC —— 整体结构
- 【转】Oracle的pipelined函数实现高性能大数据处理
- Javascript中的Prototype到底是啥
- 项目管理:关于SVN的实践
- android源代码百度网盘分享
- 移动WEB 性能优化方案
- jsp教程
- spring aop的配置
- CentOS6.5+mysql5.1源码安装过程
- iOS对UIView对象或子类对象截屏(截取的内容以UIImage的形式存储)
- Node.js本地文件操作之文件拷贝与目录遍历的方法
- Linux下修改Tomcat JVM内存设置
- Java-day02基础语法
- 20个数据库设计最佳实践