zoukankan      html  css  js  c++  java
  • 剑指Offer编程题(Java实现)——二维数组中的查找

    题目描述

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

    解题思路

    根据排序特点,该二维数组中的一个数,小于它的数一定在其左边,大于它的数一定在其下边。

    因此,从右上角开始查找,就可以根据 target 和当前元素的大小关系来缩小查找区间,当前元素的查找区间为左下角的所有元素。

    时间复杂度 O(M + N),空间复杂度 O(1)。其中 M 为行数,N 为 列数。

    答案

    public class Solution {
        public boolean Find(int target, int [][] array) {
            if (array == null || array.length == 0 || array[0].length == 0)
                return false;
            int x = 0;
            int y = array[0].length - 1;
            
            while(x < array.length && y >= 0){
                if(array[x][y] == target){
                    return true;
                }else if(array[x][y] > target){
                    y--;
                }else{
                    x++;
                }
            }
            return false;
        }
    }

    运行时间:170ms

    占用内存:16512k

    【注意】

    判断array是否为空语句一定要加上,一开始没加怎么都通过不了,也算是考验代码健壮性。

    思路参考:https://www.nowcoder.com/discuss/198840

  • 相关阅读:
    SCCM 2007 部署软件更新
    WPF开发工具
    体验Windows Live Writer写Blog
    图像的灰度和黑白处理算法
    很有用的Sql总结转载
    WPF 体验导航窗口
    WPF 一周练
    WPF 图表
    也说Linq 分组
    WPF 体验对话框调用
  • 原文地址:https://www.cnblogs.com/MWCloud/p/11235027.html
Copyright © 2011-2022 走看看