题目地址
解题思路
这道题一眼暴力遍历,但是如果真这样做,面试官可能就要说:你回去等消息吧!
所以我们选用一个较为巧妙(人均水准)的方法:从右上角开始查找二维数组,这样就可以方便我们进行数组的移动,具体体现为,每种情况只有一个移动方向。
还有需要注意的是,首先要判断二维数组是否为空。这个需要分两段进行,具体见下面的代码实现。
代码实现(C++)
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target)
{
int m=matrix.size();
//int n=matrix[0].size();
if(m==0)
{
return false;
}
int n=matrix[0].size();
if(n==0)
{
return false;
}
int i=0,j=n-1;
while(i<m&&j<n&&i>=0&&j>=0)
{
if(target==matrix[i][j])
{
return true;
}
else if(target>matrix[i][j])
{
i++;
}
else
{
j--;
}
}
return false;
}
};