美文网首页
剑指offer | 二维数组中的查找

剑指offer | 二维数组中的查找

作者: icebreakeros | 来源:发表于2019-07-31 11:23 被阅读0次

二维数组中的查找

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排列,请完成一个函数,输入这样的一个二维数组,判断数组中是否含有该整数

暴力法

思路:直接遍历二维数组中的每行每列,查找数字
时间复杂度:O(n^2)

public class FindInPartiallySortedMatrix {

    // 暴力查询 O(n^2)
    public boolean findViolence(int[][] array, int n) {
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                if (n == array[i][j]) {
                    return true;
                }
            }
        }
        return false;
    }
}

二分法

思路:利用题目中给出,从左到右,从上到下递增的顺序排序,可以考虑二分法
时间复杂度:O(nlogn)

public class FindInPartiallySortedMatrix {

    public boolean find(int[][] array, int n) {
        if (array.length > 0 && array[0].length > 0) {
            return findDetail(array, array.length, array[0].length, n);
        }
        return false;
    }

    private boolean findDetail(int[][] array, int rows, int columns, int n) {
        if (Optional.ofNullable(array).isPresent() && rows > 0 && columns > 0) {
            int row = 0;
            int column = columns - 1;
            while (row < rows && column >= 0) {
                int current = array[row][column];
                if (n == current) {
                    return true;
                } else if (n < current) {
                    column--;
                } else {
                    row++;
                }
            }
        }
        return false;
    }
}

相关文章

网友评论

      本文标题:剑指offer | 二维数组中的查找

      本文链接:https://www.haomeiwen.com/subject/dejzrctx.html