二维数组中的查找
思路
- 暴力求解,遍历m行n列所有元素,一致返回 true,否则返回 false
- 将二维数数组逆时针旋转45°,从右上角开始,就像二叉树的查询,大的在左分支,小的在右分支
- 与方法2类似,只不过是从左下角开始查找
C++实现
方法一
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
//这个是考虑输入是否为空,在牛客上不需要考虑,但是在leetcode上需要考虑
if(matrix.size()==0)
return false;
int rol = matrix.size();
int col=matrix[0].size();
for(int i = 0;i < rol;++i)
{
for(int j = 0;j < col;++j)
{
if(matrix[i][j] == target)
return true;
}
}
return false;
}
};
方法二
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
//这个是考虑输入是否为空,在牛客上不需要考虑,但是在leetcode上需要考虑
if (matrix.size() == 0)
return false;
int i = 0, j = matrix[0].size()-1;
while(i <= matrix.size()-1 && j>=0 )
{
if( matrix[i][j] > target)
j--;
else if (matrix[i][j] < target)
i++;
else return true;
}
return false;
}
};
方法三
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
if (matrix.size() == 0)
return false;
int i = matrix.size()-1, j = 0;
while(i >= 0 && j< matrix[0].size())
{
if( matrix[i][j] > target)
i--;
else if (matrix[i][j] < target)
j++;
else return true;
}
return false;
}
};
Python实现
方法一
class Solution:
def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool:
if len(matrix) == 0:
return False
for i in range(len(matrix)):
for j in range (len(matrix[0])):
if matrix[i][j] == target:
return True
return False
方法二
class Solution:
def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool:
if len(matrix) == 0:
return False
j, i = len(matrix[0])-1, 0
while i < len(matrix) and j >= 0:
if matrix[i][j] > target:
j-=1
elif matrix[i][j] < target:
i+=1
else:
return True
return False
方法三
class Solution:
def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool:
if len(matrix) == 0:
return False
j,i = 0, len(matrix)-1
while i >= 0 and j < len(matrix[0]):
if matrix[i][j] > target:
i-=1
elif matrix[i][j] < target:
j+=1
else:
return True
return False
参考文献
二维数组中的查找(标志数,清晰图解)