题解 | #二维数组中的查找#
二维数组中的查找
http://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e
原理:
基本原理为二分查找(对于二维数组的每一行),使用递归函数;同时对于每一列也采用递归的方式(另一个对于列的递归函数),牺牲空间换取时间复杂度的减少。
代码:
public class Solution {
public boolean findRow(int target, int [][] array, int L, int R, int column) {
//原理同二分查找
if (L<=R) {
if (target<array[column][(L+R)/2])
return findRow(target, array, L, (L+R)/2-1, column);
else if (target>array[column][(L+R)/2])
return findRow(target, array, (L+R)/2+1, R, column);
else
return true;
}
return false;
}
public boolean findColumn(int target, int [][] array, int column) {
//对于数组的每列逐层递归
if (column==array.length)
return false;
return findRow(target, array, 0, array[0].length-1, column) || findColumn(target, array, ++column); //返回值里,只要有一个层找出结果,即可返回true
}
public boolean Find(int target, int [][] array) {
return findColumn(target, array, 0);
}
}
查看7道真题和解析