题目描述
mn均小于1000
题目分析
暴力方法时间复杂度较高,巧妙思路从右上角或者左下角开始查找,根据有序特征每次比较只需向固定方向移动。
代码展示
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
//杨氏矩阵查找 右上方或者左下方开始
if (matrix.empty()) {
return false;
}
int row = 0;
int col = matrix[0].size() - 1;
while (col >= 0 && col < matrix[0].size() && row >= 0 && row < matrix.size()) {
if (matrix[row][col] == target) {
return true;
}else if (matrix[row][col] > target) {
col--;
}else {
row++;
}
}
return false;
}
};
结果分析
空间复杂度 O(1),时间复杂度最坏O(m+n),mn为行数和列数,因此也是O(1).