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

二维数组中的查找

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

相关推荐

没用,看懂了下次包忘的😓
点赞 评论 收藏
分享
YZBPXX:国科的佬都挂了 让我们这些四非怎么活呀
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务