赞
踩
现有一个n*n的二维正整数数组nums,每行元素保证递增,每列元素保证递增,求某正整数x是否存在于该二维数组中,需要尽量优化时间和空间复杂度
输入描述:
输入一个int的二维数组,目标值
输出描述:
输出目标值在二维数组中是否存在
输入
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;
}
}
给定一个二叉树, 检查它是否是镜像对称的
输入描述:
输入一棵树
输出描述:
输出这棵树是否是镜像对称
输入
例如以下是镜像对称的
1
/ \
2 2
/ \ / \
3 4 4 3
输出
true
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); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。