编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:
每行的元素从左到右升序排列。
每列的元素从上到下升序排列。
方法一:暴力循环
两个for循环(超出时间限制)
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int n=matrix.size();
int m=matrix[0].size();
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(matrix[i][j]==target)
{
return true;
}
}
}
return false;
}
};
方法二:根据题意修改循环
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
if(matrix.size() == 0) {
return false;
}
int i=0;
int j=matrix[0].size()-1;
while(i<matrix.size()&&j>=0)
{
if(matrix[i][j]==target)
{
return true;
}
else if(matrix[i][j]>target)
{
j--;
}
else if(matrix[i][j]<target)
{
i++;
}
}
return false;
}
};
ps:最开始使用这种方法时用了三个if循环导致访问数组时出现了-1的下标导致执行出错很尴尬。