【剑指offer】面试题3:二维数组中的查找
来源:互联网 发布:淘宝追加评论时间 编辑:程序博客网 时间:2024/05/16 05:47
题目:在一个二维数组中,每一行从左到右递增,每一列从上到下递增,在这个二维数组中,查找给定的数是否存在。
分析:遍历来查找的事这里就不说了,像星爷说的:“像我这么理智的人,怎么会相信这么无稽的事情。”
这本书里提倡,遇到问题画画图,写写小例子。我们把已知条件都在例子中一一标出来。
行递增,列递增,同一颜色按箭头方向,即顺时针方向递增有序,对于圈出的副对角线元素,对于所在行,是该行最大的,对于所在列,是列里最小的,所以它就是中间点(对于同一颜色的部分)。
所以我们觉得在负对角线上的元素位开始,会取得不错的效果,那么这些对角元素效果都一样吗?也就是可以从任意的对角元素开始,还是对他们还有其他的要求?
首先看下右上角的对角元素 9,若查找的数比 9 大,那么可以看出,9 所在的这行就不需要查找了(它是该行最大),就可以跳过一整行,若查找的数比9小,9 所在的列就不需要查找了(它是该行最小的),所以这样就可以整行整列的跳。
再看下绿色的9,若查找的元素比9大,那么我们该这么走呢?是向上还是向左,这就存在二义性,难道要先向左,再向上?好吧,即使这样可以找到,但是相比红色的9还是要麻烦。
7的情况类似。
我们再看下左下角的6,若查找的数比6大,那么6所在的列就不用查找了(它是该列的最大),反之,若查找的数比6小,该行也不用查找了,这样也可以整行整列的跳过。
综上,起始点选择副对角线的左下和右上都是可行的,中间的对角元素存在二义性,不可取。
bool Find(vector<vector<int> > &matrix, int number){int rows = matrix.size();if(rows == 0) return false;int cols = matrix[0].size();int search_row = 0;int search_col = cols - 1;while (search_row < rows && search_col >= 0){int cur_num = matrix[search_row][search_col]if(cur_num == number)return true;else if(cur_num < number)search_row++;elsesearch_col--;}return false;}
1 0
- 【剑指offer】面试题3:二维数组中的查找
- 【剑指offer】面试题3:二维数组中的查找
- 剑指Offer:面试题3 二维数组中的查找
- 《剑指Offer》面试题3:二维数组中的查找
- 剑指offer面试题3-二维数组中的查找
- 【剑指Offer学习】【面试题3 :二维数组中的查找】
- 二维数组中的查找(剑指offer面试题3)
- 【剑指offer】 面试题3: 二维数组中的查找
- 剑指Offer面试题3:二维数组中的查找
- 剑指Offer:面试题3 二维数组中的查找
- 剑指offer-面试题3:二维数组中的查找
- 剑指offer面试题3之二维数组中的查找
- 剑指offer面试题3—二维数组中的查找
- 剑指offer 面试题3 二维数组中的查找
- 剑指offer面试题3:二维数组中的查找
- 剑指offer面试题3:二维数组中的查找
- 剑指offer - 面试题3:二维数组中的查找
- 剑指Offer---面试题3:二维数组中的查找
- 对话框按enter会关闭的解决办法
- javaEE servlet
- RTS游戏中A*寻路算法优化
- 算法java实现--回溯法--符号三角形问题
- SQLite 常用语句 sql语句
- 【剑指offer】面试题3:二维数组中的查找
- java web 起步++
- final和finally,finalize的区别
- 数据结构之堆栈的顺序存储
- 题意!!!
- fedora-vim 源码
- 设置myeclipse自动生成的author等注释
- 真正的中国天气api接口xml,json(求加精) ...
- nginx安装与配置