剑指offer之二维数组的查找
题目
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解题思路
这道题很简单,最简单的就是暴力求解,遍历整个数组看看是否有匹配的,我们需要想点优化的;
那么这道题数组有个特点,那就是从上到下,从左到右 数组内的值都是递增的。
则我们可以排除掉所有数组中横向的第一个元素是大于target的所有数列;
接着我们根据从左到右递增的原则,还可以再去排除掉所有行中最后一个元素比target还大的行;
C++实现代码
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
int yLength=array.size();
int xLength=array[0].size();
for(int i=0;i<xLength && array[i][0]<=target;i++){
for(int j=0;j<yLength && array[i][xLength-1]>=target;j++){
if(array[i][j]==target){
return true;
}
}
}
return false;
}
};