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

二维数组中的查找

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

class Solution {
public:
    bool Find(int target, vector<vector<int> > array) {
        int rowMax=array.size()-1;
        if(rowMax==-1)
            return false;
        int colMax=array[0].size()-1;
        if(colMax==-1)
            return false;

        //定义(i,j)指针
        int i=0,j=colMax;//从二叉树的根结点开始
        while(i<=rowMax&&j<=colMax&&i>=0&&j>=0)
        {
            
            if(array[i][j]==target)
            {
                return true;
            }
            else if(array[i][j]<target)//如果大于根结点
            {
                ++i;//转移到右子树
            }
            else 
            {
                --j;//小于遍历左子树
            }
        }

        return false;
        
    }
};

将数表逆时针旋转45度,发现数表类似于一颗二分排序树,每走过一个结点,将排除未走过的另一棵子树的根结点,这样遍历的结点每次只有两个方向可走:

若target大,走右子树,target小走左子树,不会逆遍历子树(因为正在判断的结点的直接双亲结点已经在上一个结点判断时排除了),这就保证了在线性复杂度内找到target结点(或者遍历出子树)

全部评论

相关推荐

昨天 15:02
门头沟学院 Java
刚打开网申页面就不想填了,还是不要为难自己了
poppinzhan...:多益老行业毒瘤了,碰到徐波这种恶心的烂人,去了也是受罪。
点赞 评论 收藏
分享
自学java狠狠赚一...:骗你点star的,港卵公司,记得把star收回去
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

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