剑指 Offer 04. 二维数组中的查找
题目链接
从右上角观察数组,发现数组和二叉搜索树类似。
因此可以这么做,右上角的值和target比较,如果大于target,行加1,如果小于target,列减1。
C++:
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
int width = matrix.size();
if(width == 0) return false;
int height = matrix[0].size();
int i = 0, j = height-1;
while(i < width && j >= 0)
{
if(target > matrix[i][j])
i++;
else if(target < matrix[i][j])
j--;
else
return true;
}
return false;
}
};
python:
class Solution:
def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool:
width = len(matrix)
if width == 0: return False
height = len(matrix[0])
i = 0; j = height-1
while i < width and j >= 0:
if target > matrix[i][j]:
i+=1
elif target < matrix[i][j]:
j-=1
else:
return True
return False
如果对你有帮助的话,请点个赞哦!