思路
方法一:
首先选取矩阵右上角的元素作为起始元素,如果要查找的数字与该数字相等,则查找结束;如果该数字大于要查找的数字,则删除该数字所在的列;如果该数字小于要查找的数字,则删除该数字所在的行,这样一步步的缩小查找的范围,直到找到元素或者查找的范围为空。
public boolean Find(int [][] array,int target){
if(array==null||array.length==0||array[0].length==0)
return false
int m=array.length;
int n=array[0].length;
int i=0;j=n-1;
if(target>array[m-1][n-1]||target<array[0][0])
return false;
while(i<m&&j>=0){
if(array[i][j]>target){
j--;
}else if(array[i][j]<target[i][j]){
i++;
}else{
return true;
}
}
return false;
}
方法二:
把二维数组看成一个一维的数组,则这个一维的数组是一个排序的数组,二维数组和一维数组有如下对应得关系:matrix[i][j]=a[i*列+j]。考虑到这个以后可以使用二分法来查找这个元素。
public boolean searchMatrix(int [][] matrix,int target){
if(matrix==null||matrix.length==0||matrix[0].length==0)
return false;
int m=matrix.length,n=matrix[0].length;
int start=0,end=m*n-1;
while(start<=end){
int middle=(start+end)/2;
if(matrix[middle/n][middle%n]==target)
{ return true;
}else if(matrix[middle/n][middle%n]<target){
start=middle+1;
}else {
end=middle-1;
}
}
return false;
}