俺的二分弱鸡法:
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target)
{
int L = matrix.size(),l=0;
if (!L)
{
return false;
}
else
{
l = matrix[0].size();
}
if (!l)
{
return false;
}
if (matrix[0][0] > target || matrix[L - 1][l - 1] < target)
{
return false;
}
int m = 0, n = L-1;
int row=-1;
while (m < n)
{
int mid = m + (n - m) / 2;
if (matrix[mid][0] > target)
{
n = mid-1;
}
else if(matrix[mid][l-1]<target)
{
m = mid+1;
}
else
{
row = mid;
break;
}
}
row = row == -1 ? m : row;
m = 0;
n = l-1;
while (m < n)
{
int mid = m + (n - m) / 2;
if (matrix[row][mid] == target)
{
return true;
}
else if (matrix[row][mid] > target)
{
n = mid - 1;
}
else
{
m = mid + 1;
}
}
return matrix[row][m]==target;
}
};
评论区大佬的:O(m+n) m、n分别为矩阵高和宽
public boolean searchMatrix(int[][] matrix, int target) {
if(matrix.length == 0)
return false;
int row = 0, col = matrix[0].length-1;
while(row < matrix.length && col >= 0){
if(matrix[row][col] < target)
row++;
else if(matrix[row][col] > target)
col--;
else
return true;
}
return false;
}