
算法
萧先森●‿●
这个作者很懒,什么都没留下…
展开
-
通过前序遍历序列和中序遍历序列构造二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:前序遍历:根节点->左子树->右子树中序遍历:左子树->根节点->右子树对于前序遍历序列,可以唯一确定根节点的值,由于前序遍历是先遍历根节点,所以根节点必然是前序遍历序列的第一个元素,得到根节点后,可以在中序遍历序列.原创 2021-05-15 09:06:57 · 1080 阅读 · 0 评论 -
132序列
给你一个整数数组 nums ,数组中共有 n 个整数。132 模式的子序列 由三个整数 nums[i]、nums[j] 和 nums[k]组成,并同时满足:i < j < k 和 nums[i] < nums[k] < nums[j] 。如果 nums 中存在 132模式的子序列 ,返回 true ;否则,返回 false 。public boolean find132pattern(int[] nums) { // 使用一个双向队列维持一个单调递减的序列 Dequ.原创 2021-04-19 21:23:46 · 471 阅读 · 0 评论 -
01矩阵
给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。在一个矩阵里只有0和1两种数字,求出每一个元素到最近一个0的距离,如果元素本身为0,则距离为0,在找最近0的过程只有四个方向,上下左右从题目描述来看,不难得出我们在求某个元素的最近一个0的距离时,可以根据旁边的元素得到,因此我们可以使用动态规划同时对于每一个元素1,我们可以从这个元素的上下左右去寻找一个最近的0,类似于广度优先遍历,因此我们也可以考虑用BFS的思想去完成1. 动态规划publi.原创 2021-04-19 19:04:03 · 953 阅读 · 0 评论 -
将矩阵旋转90度,要求在原来的矩阵上进行操作
对于一个给定的n*n的矩阵,将矩阵顺时针旋转90度,要求在原来的矩阵上进行操作对于矩阵的旋转来说,无论是旋转90度还是180度,无论是顺时针还是逆时针,对于矩阵的元素总能找一个规律可以得到旋转后的位置,那么如果是顺时针旋转90度,对应的坐标变换为newMatrix[i, j] = oldMatrix[n - j - 1, i],所以很容易得出下列的代码public int[][] rotate(int[][] arr) { int n = arr.length; int[][] ne.原创 2021-04-16 21:12:05 · 791 阅读 · 0 评论 -
无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。在写算法题目的时候,首先要有思路,不要盲目动笔,同时要注意题目的要求,在看到不含有重复字符的时候,应该想到用哪个数据结构,在Java集合中,Set集合符合这个条件(无序且不重复),那么该怎么写呢?可以想到要用到滑动窗口的思想,一个左指针,一个右指针,两个指针的范围都是0-len,所以我们可以让右指针一直前进,直到遇到重复的字符,然后得到此时子串的长度,并与之前的结果取一个较大值,然后就是左指针前进一步,重复上述步骤,直到左指针到达字符串的.原创 2021-04-16 20:30:10 · 78 阅读 · 0 评论 -
二叉树的最小深度-递归算法和非递归算法
递归算法最小深度是从根节点到最近叶子节点的最短路径上的节点数量。在使用递归算法求得二叉树的最小深度时与求最大深度的思路类似,代码如下public int minDepth(TreeNode root) { if (root == null) return 0; return Math.min(minDepth(root.left), minDepth(root.right)) + 1;}那么代码是不是就这样呢?这样写看起来是对的,但其实这种解法忽略了一种情况,就是说,如果一个原创 2021-04-16 17:08:38 · 287 阅读 · 0 评论 -
二叉树的最大深度-递归算法和非递归算法
递归算法递归算法:指一种通过重复将问题分解为同类的子问题而解决问题的方法。如何通过递归求出一棵二叉树的最大深度,首先递归算法特别重要的一个部分就是结束条件,那么结束条件怎么定义呢?对于二叉树而言,递归就是不断递归二叉树的左右结点,那么结束条件自然就是当结点为null时if (root == null) { return 0;}递归还有一个部分就是递归的规律,那么对于求解二叉树最大深度,递归规律是什么呢?我们在每次调用递归函数的时候相当于遍历一个树的结点,那么如何得到最大深度呢?就是在调用递归原创 2021-04-16 16:37:53 · 412 阅读 · 0 评论