题解 | #二维数组中的查找#

二维数组中的查找

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);
    }
}
全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务