~二维数组中的查找~
来源:互联网 发布:win10优化版 编辑:程序博客网 时间:2024/05/17 21:43
问题描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
问题分析:
1.我们可以先假设一个简单的二维数组及整数(如下图),以此为例来找到解决问题的思路。
2.乍一看问题,可能会觉得很简单,因为一个双重for()循环就可以轻易的得到答案,可惜的是时间复杂度是O(N^2),所以这一思路会很自然的被系统自动舍弃,还是开动开动脑筋吧!
由问题描述可知,数组的排列规则为:每一行(row)都按照从左到右递增的顺序排序,每一列(col)都按照从上到下递增的顺序排序。那么我们是不是可以试一下用最左下角的数字开始比较呢?或许可以试试!
由数组知最左下角的数字为7,用7与整数3做比较自然是7比较大。由规则得7所在的行每一个数字都比整数3大,而7所在的列每一个数字都可能比整数3小,所以应将行减1(即--row)后再与整数3进行判断。由于4大于整数3,故应再将行减1,让1与整数3做比较。用1与整数3做比较自然是整数3比较大。由规则得1所在的行每一个数字都可能比整数3大,所以应将列减1(即--col)后再与整数3进行判断。按照上述逻辑即可判断出数组中含有该整数。
源代码如下:
bool Find(int target, vector<vector<int> > array) { int row=array.size(); //行 int col=array[0].size(); //列 int i=row - 1; int j=0; while(i>=0 && j<=col-1) { if(array[i][j] > target) { --i; } else if(array[i][j] < target) { ++j; } else { return true; } } return false; }
0 0
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- __ATTRIBUTE__ 你知多少?
- HZAU 1202 GCD( 斐波那契数列+矩阵快速幂)
- HocTracker:动态社会网络的群组演化追踪
- 回文子序列 ssl 2662 暴力
- opencv学习笔记-openCV2与opencv3机器学习库MLL
- ~二维数组中的查找~
- Retrofit
- A C M time
- Windows下搭建Weex环境【初体验】
- Android屏幕适配全攻略(最权威的官方适配指导)
- C++中map、hash_map、unordered_map、unordered_set通俗辨析
- Win10安装SQL2012或SQL2014报错
- 2_5最近邻算法kNN(k_nearest_neighbor)——classifyPerson_2_5
- 类的设计SOLID原则