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

二维数组中的查找

http://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e

题目要求O(n + m),即最坏的情况是行一次列一次,所以我们每次行动都需要排除 一行 或者 一列 。如果从 左上角 或 右下角 开始查找的话,会出现两个方向(都是 比它小 的,或者都是 比它大 的),无法排除。因此我们需要从 右上角 或者 左下角 开始查找,这样每一次操作都可以排除 一行 或 一列 。例如,从 右上角 开始查找的话,比 target 大,就找右边的;比 target 小,就找下面的。最终若超出边界的话,就是没有与 target 值相同的元素。

    public boolean Find(int target, int[][] array) {
        int row = array.length;
        if (row == 0) {
            return false;
        }
        int col = array[0].length;
        if (col == 0) {
            return false;
        }
        int i = 0;
        int j = col - 1;
        while (i < row && j >= 0) {
            if (array[i][j] < target) {
                i++;
            }
            else if (array[i][j] > target) {
                j--;
            }
            else {
                return true;
            }
        }
        return false;
    }
}
全部评论

相关推荐

昨天 22:34
已编辑
重庆邮电大学 Java
快手 客户端开发 (n+5)k*16 公积金12
点赞 评论 收藏
分享
11-01 08:48
门头沟学院 C++
伤心的候选人在吵架:佬你不要的,能不能拿户口本证明过户给我。。球球了
点赞 评论 收藏
分享
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务