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

二维数组中的查找

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

最简单易懂且效率也很高的代码如下:
时间复杂度O(n),空间复杂度O(1)

public class Solution {
    public boolean Find(int target, int [][] array) {

 if (array == null || array.length == 0) {
            return false;
        }

        //本题的关键是不能从左上角或者右下角开始找
        //而是要从左下角或者右上角的元素找
        int innerLength = array[0].length;
        int temp = 0;
        //我这里从左下角的元素开始找
        for (int i = array.length - 1; i >= 0; i--) {
            for (int j = temp; j < innerLength; j++) {
                if (target == array[i][j]) {
                    return true;
                } else if (target < array[i][j]) {
                    //这里用临时变量做了微小的优化,
                    // 也就是当这一行的这个元素比目标值大的时候,
                    // 我们可以直接去上一行的跟这个对应的下标的元素对比即可
                    temp = j;
                    break;
                }
            }
        }
        return false;
    }
}
全部评论

相关推荐

2025-12-28 16:32
重庆邮电大学 Java
程序员花海:1.技能放最后,来面试默认你都会,技能没啥用 2.实习写的看起来没啥含金量,多读读部门文档,包装下 接LLM这个没含金量 也不要用重构这种 不会给实习生做的 3.抽奖这个还是Demo项目,实际在公司里面要考虑策略,满减,触发点,触发规则 库存 之类的,不是这个项目这么简单 4.教育背景提前,格式为 教育背景 实习 项目 技能 自我评价
简历被挂麻了,求建议
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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