二维数组查找
题目
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:
这样的数组非常有特点,根据剑指的解释,每次比较右上角或左下角的元素即可清除一列或一行。在写程序时注意判断数组是否为空。
C++
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
if (matrix.size()==0)
return false;
int row = matrix.size();
int column = matrix[0].size();
bool find = false;
int x = 0; //x代表行,x++即删除一行
int y = column-1; //y代表列,y--即删除一列
while(x<row && y>=0)
{
if(matrix[x][y]==target)
{
find = true;
break;
}
else if (matrix[x][y]>target)
y--;
else
x++;
}
return find;
}
};
python
class Solution:
def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool:
if len(matrix)==0:
return False
row = len(matrix)
column = len(matrix[0])
x = 0
y = column-1
while(x<row and y>=0):
if matrix[x][y]==target:
return True
elif matrix[x][y]>target:
y-=1
else:
x+=1
return False