算法学习记录一(C++)--->二维数组中的查找
来源:互联网 发布:ambr软件 编辑:程序博客网 时间:2024/05/16 15:06
描述
- 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- array: 待查找的二维数组
target:查找的数字 - 返回true找到,返回false没找到
面试题
二维数组 —–> [[a,a,a,a,a],[b,b,b,b,b],[c,c,c,c,c,c],[d,d,d,d,d]]
最简单的解法(遍历)
class Solution {public: bool Find(int target, vector<vector<int> > array) { int row = 0; int col = 0; bool isFound = false; for(int i=0;i<array.size();i++){ for(int j=0;j<array[i].size();j++){ if(false == isFound && target==array[i][j]){ isFound = true; break; } } } return isFound; }};
分治解法
目标数字和数组中对比的数组无非就是三种情况 > < =
* 那么当数字相等的时候就找到了的时候
* 那么当目标数字比数组中的数字大的时候,必定在右边或者上边
* 那么当目标数字比数组中的数字小的时候,必定在左边或者下边
1.那么在数据中,target目标数字对比下,比数组中数字小的必定在左边或者上边,比他大的必定在右边或者下边
2.那么考虑下四个角进行开始,理论上,从一个4*4的矩形开始一行或者一列进行缩小,最后锁定到最小为1*1的矩形,从而找到目标数字,但是这是理论的,有时在这个区间就能找到目标数字
3.但是左上角和右下角,从这两个点开始的话,例如左上角,如果目标数字比这个大,在矩阵的右边或者下边,这就很尴尬了,无法区分,右下角也是一样
4.那么我们就要从右上角和左下角开始进行比较,例如右上角,比他大的就是下边(行+1),比他小的就是左边(列-1),这样这个矩形就能慢慢缩小,最终锁定需要找到的数字
我们根据图来从右上角分析下
1.9 > 7 那么深颜色矩形列减少一,向左减少一列
2.8 > 7 还是一样,矩形继续想做减少1列
3.2 < 7 目标数字大于数组,行+1,向下缩小
4.4 < 7 还是小于,继续向下缩小行
5.7 = 7 找到目标数字
6.可以看出,这种方法每一次减少一行或者一列,效率肯定比遍历高一点了
右上角开始
class Solution {public: bool Find(int target, vector<vector<int> > array) { if(array.size() != 0){ int row = 0; // 右上角0行 int col = array[0].size()-1; // 右上角最右边列 while(row < array.size() && col >= 0){ if(array[row][col]==target) return true; // 目标数字更小,列减少 else if(array[row][col]>target )col--; // 目标数字更大,行增加 else row++; } } return false; }};
左下角开始
class Solution {public: bool Find(int target, vector<vector<int> > array) { if(array.size() != 0){ int row = array.size()-1; int col = 0; while(col < array[0].size() && row >= 0){ if(array[row][col]==target) return true; else if(array[row][col]>target )row--; else col++; } } return false; }};
阅读全文
0 0
- 算法学习记录一(C++)--->二维数组中的查找
- 算法练习一:二维数组中的查找
- 算法学习之二维数组中的查找
- 算法学习之二维数组中的查找
- 二维数组中的查找(C语言)
- 【算法】二维数组中的查找
- 算法-二维数组中的查找
- 二维数组查找算法(C++)
- 【C++】二维数组中的查找
- 二维数组中的查找(数组 查找)
- 面试算法(三十)二维数组中的查找
- 【算法训练营】二维数组中的查找
- (一)剑指Offer之二维数组中的查找
- 剑指offer(一)二维数组中的查找
- 剑指Offer(一)二维数组中的查找
- 二维数组中的查找【每日一题】
- 面试题解:二维数组中的查找(C 语言版)
- 剑指offer(C++)——二维数组中的查找
- centos上搭gitlab
- wamp上的apache如何配置ssL证书,将我们的http改成Https
- Codeforces 834 C The Meaningless Game(二分)
- Java程序员最常犯的错误盘点
- neo4j 的操作
- 算法学习记录一(C++)--->二维数组中的查找
- Search Insert Position
- 40. Combination Sum II
- Hello,Blogs
- Python 进程内存增长解决方案
- Linux下 crond和crontab
- NodeJS excel 导出(exceljs)
- Android 最火的快速开发框架XUtils
- OpenCv使用BP神经网络将图片分为三类