题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
时间限制:1秒 空间限制:32768K
这道题的常规思路是进行行列依次遍历,但是会因为超时而不能通过。所以,不能强攻,只能智取。利用题目给出的条件
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
int rows = array.size(); //计算数组的行数
int columns = array[0].size(); //计算数组的列数
bool findit = false; //定义布尔型变量代表是否找到
if(rows > 0 && columns > 0)
{
int row = rows - 1; //从数组的最后一行第一个元素开始
int column = 0;
while(row >= 0 && column < columns)
{
if(target == array[row][column])//若等于要寻找的元素就结束
{
findit = true;
break;
}
else if(target > array[row][column])//若小于要寻找的元素则列数加一
++column;
else //若大于要寻找的元素则行数减一
--row;
}
}
return findit;
}
};