public class Searcha2DMatrix
{
public Searcha2DMatrix(){}
public boolean searchMatrix(int[][] matrix, int target)
{
if(matrix.length == 0 || matrix[0].length == 0)
{return false;}
int high= matrix.length-1;
int low= 0;
int mid= 0;
while(low < high)
{
mid= (low+high)/2;
if(target == matrix[mid][0])
{return true;}
else if(target < matrix[mid][0])
{high= mid-1;}
else
{low=mid+1;}
}
if(low == 0 && target < matrix[0][0])
{return false;}
if(target > matrix[low][matrix[0].length-1])
{return false;}
if(target < matrix[low][0]){low--;}
int index= low;
high= matrix[0].length-1;
low=0;
while(low < high)
{
mid= (low+high)/2;
if(target == matrix[index][mid])
{return true;}
else if(target < matrix[index][mid])
{high= mid-1;}
else
{low= mid+1;}
}
if(target == matrix[index][low])
{return true;}
else
{return false;}
}
}
该算法使用折半查找的思想,通过两次折半查找先确定行坐标再确定列坐标