- 问题描述
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
1.每行中的整数从左到右按升序排列。
2.每行的第一个整数大于前一行的最后一个整数。
- 解决方案
把二维数组当做一维数组来看,二分查找,代码如下:
public boolean searchMatrix(int[][] matrix, int target) {
if((matrix==null||matrix.length==0)||(matrix.length==1&&matrix[0].length==0))
return false;
int len = matrix[0].length;
int low = 0;
int high = matrix.length * matrix[0].length - 1;
while(low + 1 < high){
int mid = low + ((high - low) >> 1);
if(matrix[mid / len][mid % len] > target)
high = mid;
else if(matrix[mid / len][mid % len] < target)
low = mid;
else
return true;
}
if(matrix[low / len][low % len] == target || matrix[high / len][high % len] == target)
return true;
else
return false;
}