问题
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。
例子
思路
-
方法1
O(n)找到目标行,然后二分查找该行
-
方法2
代码
//方法1
class Solution {
public boolean searchMatrix(int[][] matrix, int t) {
if(matrix.length==0) return false;
int i=0;
for(i=0; i<matrix.length-1; i++){
if(matrix[i][0]==t) return true;
else if(matrix[i][0]<t && matrix[i+1][0]>t) break;
}
//此时要么在0~len-2找到目标行,要么i为len-1
int m=0,n=matrix[i].length-1;
while(m<=n) {
int mid = (m+n)/2;
if(t==matrix[i][mid]) return true;
else if(t<matrix[i][mid]) n=mid-1;
else m=mid+1;
}
return false;
}
}
//方法2