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

二维数组中的查找

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

相关推荐

king122:专业技能不要写这么多,熟悉和熟练你经不住问,排版有些难看,中间的空隙搞小一点,项目描述的话感觉是从课程中抄下来的,改一改吧,不然烂大街了,每个项目都写一两点,用什么技术实现了什么难点,然后再写一些数字上去像时间又花了90%这样,这样面试会多一些,如果觉得自己的项目还是不够用的话,我有几个大厂最近做过的实习项目,感兴趣的话可以看我简介中的项目地址
点赞 评论 收藏
分享
门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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