方法1:将”有序“的二维矩阵(数组),当作有序的一维数组来处理,时间复杂度O(log(row*column))
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int row=matrix.length;
int column=matrix[0].length;
int left=0;
int right=row*column-1;
int mid=0;
while(left<=right)
{
mid=left+(right-left)/2;//这个mid值你是不可能通过二维数组找到的,这个是拉长过后的值,计算出一维数组的位置之后,还要转回二维数组,才能作比较,除以列数即为行号,与列数作余即为列号
if(matrix[mid/column][mid%column]==target)
return true;
if(matrix[mid/column][mid%column]<target)
left=mid+1;
else
right=mid-1;
}
return false;
}
}
方式二 两次二分 先”竖着“找,再”横“着找 , Ologn+logm m n是行和列数
方式三 暴力破解(遍历) 最坏时间复杂度O(N^2)
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
if(matrix==null || matrix.length==0)
return false;
for(int i=0;i<matrix.length;i++)
{
for(int j=0;j<matrix[0].length;j++)
{
if(matrix[i][j]==target)
return true;
}
}
return false;
}
}