class Solution {
public boolean searchMatrix(int[][] m, int t) {
if(t<m[0][0]||t>m[m.length-1][m[0].length-1]){return false;}
int y1=0, y2=m.length-1, ym=0;
while(y1<=y2){
ym= y1 + (y2 - y1) / 2;
if(m[ym][m[0].length-1]<t){
y1 = ym+1;
}else
if(m[ym][0]>t){
y2 = ym-1;
}else break;
}
int x1=0, x2=m[0].length-1, xm=0;
while(x1<=x2){
xm= x1 + (x2 - x1) / 2;
if(m[ym][xm]<t){
x1 = xm+1;
}else
if(m[ym][xm]>t){
x2 = xm-1;
}else return true;
}
return false;
}
}
解析:就是用两次二分搜索,搜出相应的y和x。
关键呢,在于对Matrix,length一定要-1,对2D Matrix,m [][] 要有一定的理解。