【发布时间】:2017-06-11 02:45:08
【问题描述】:
我被以下问题困扰:
给定一个大小为 n2 其中 n = 2k 的 int 二维矩阵
mat,搜索整数 k。
矩阵的行和列已排序。
如果我们将矩阵分成四等份,每个季度也会被排序。例如,给定这个矩阵:
-4 -2 5 9
2 5 12 13
13 20 25 25
22 24 49 57
如果我们把它分成四等份,我们可以看到第一季度的所有数字都等于或小于第二季度的数字。
为了得到一个高效的算法,我想在二维上进行递归二分搜索,但是在前面的矩阵上搜索不到2。
代码如下:
public static boolean find(int[][] mat, int x){
return find2(mat, x, 0, mat.length-1,0, mat.length-1);
}
private static boolean find2(int[][] mat, int x, int lorow, int hirow,int locol,int hicol){
if(mat.length==0) return false;
if(lorow>hirow || locol>hicol) return false;
int midrow=(lorow+hirow)/2;
int midcol=(locol+hicol)/2;
if(mat[midrow][midcol] == x ) return true;
else if(mat[midrow][midcol] < x)
return find2(mat,x,lorow,midrow,midcol+1,hicol) || find2(mat,x,midrow+1,hirow,locol,midcol) || find2(mat,x,midrow+1,hirow,midcol+1,hicol);
else
return find2(mat,x,lorow,midrow,locol,midcol-1) || find2(mat,x,midrow,hirow,locol,midcol-1) || find2(mat,x,midrow+1,hirow,midcol+1,hicol);
}
请指教。
【问题讨论】:
标签: java binary-search