MetaApp笔试题-在二维数组中查找值/检察树是否是镜像对称树

65 篇文章 0 订阅

问题1,在二维数组中查找值

问题描述

现有一个n*n的二维正整数数组nums,每行元素保证递增,每列元素保证递增,求某正整数x是否存在于该二维数组中,需要尽量优化时间和空间复杂度

输入描述:
输入一个int的二维数组,目标值

输出描述:
输出目标值在二维数组中是否存在

示例

示例1

输入
1,2,3
2,3,4
3,4,5
3

输出
true

解决思路

分析

题目很明显是不希望我们通过两次遍历查找到目标数字是否存在,而是需要根据规律去判断。

方法

1.根据规律判断,依次查找
2.采用二分超找的方法

代码实现

// 思路1实现
public class Main{
    public static boolean searchMatrix(int[][] nums, int x) {
        if (nums == null || nums[0] == null) return false;
        // 从最右侧的最大值开始判断,小于直接跳行,大于,则依次递减查找
        int i = 0, j = nums[0].length - 1;
        while (i < nums.length && j >= 0) {
            if (nums[i][j] == x) return true;
            else if (nums[i][j] > x) --j;
            else ++i;
        }
        return false;
    }
}

问题2,检察树是否是镜像对称树

问题描述

给定一个二叉树, 检查它是否是镜像对称的

输入描述:
输入一棵树

输出描述:
输出这棵树是否是镜像对称

示例

示例1

输入
例如以下是镜像对称的
1
/ \
2 2
/ \ / \
3 4 4 3
输出
true

解决思路

分析

  1. 通过镜像树的对称性质可以发现,节点的左节点比较的是同层对称节点的右节点,节点的右节点比较的是同层对称节点的左节点

方法

  1. 通过递归的方式判断

代码实现

public class IP地址校验 {
    static class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(int x) { val = x; }
    }

    public static boolean isTreeSymmetric(TreeNode root) {
        return isSame(root, root);
    }

    public static boolean isSame(TreeNode t1,TreeNode t2){
        if (t1 == null && t2 == null) return true;
        if (t1 == null || t2 == null) return false;
        // 根节点值的比较,左节点和右节点比较,右节点和左节点比较
        return t1.val == t2.val && isSame(t1.left,t2.right) && isSame(t1.right,t2.left);
    }
}

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值