剑指 Offer 04. 二维数组中的查找
思路1:从右上角出发开始寻找
从右上角出发开始寻找,如果大于target,就向左查找,如果小于target,就向下查找
代码1:
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
int i=matrix.size()-1,j=0;
while(i>=0&&j<matrix[0].size())
if(matrix[i][j]==target) return true;
else if(matrix[i][j]>target) i--;
else j++;
return false;
}
};
时间复杂度:O(n+m)
空间复杂度:O(1)
思路2:二分法
对每一行进行二分查找,找到target
或者对对角线的右侧和下侧进行二分查找
代码2:
- 时间复杂度:O(mlgn)\O(lgk!),k=min(m,n)
- 空间复杂度:O(1)。