ARTS (第47周)
压力并不能转化为动力。 压力和动力的来源都是目标。从目标看到了希望,就产生了动力,从目标看到了阻碍,就产生了压力。
Algorithm 算法
从上往下打印二叉树
1 | 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 |
其实就是个bfs
1 | import java.util.ArrayList; |
二叉搜索树的后序遍历序列
1 | 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同 |
自上而下的拆分成一个一个子树进行判断的递归
1 | public boolean VerifySquenceOfBST1(int[] sequence) { |
优化版
看到的题解,得到了启发做出来的结果。每次都砍掉末尾的根节点。然后把左子树当作是右子树的最小节点的左子树。
因为:原本的遍历结果,和把当前左子树当作是右子树的最小节点的左子树进行遍历的结果,其实是一样的。
1 | public boolean VerifySquenceOfBST(int[] sequence) { |
这是看到的别人的写法
最初看到创建了多个Stack 以为是创建多个Stack来模拟递归的方法栈的写法,然后发现不是
这个方法是利用后续遍历的规律做的,
例如 最后一个节点是根,如果最后一个节点比根大,就是根节点的右子树,反之就是左子树
一个很强大的写法 Orz
来自 https://www.nowcoder.com/profile/709610362 凉风起天末
1 | // 这是看到的别人的写法 |
二叉树中和为某一值的路径
1 | 输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前) |
这里的题目要求在返回值的list中,数组长度大的数组靠前。
我就想用BFS,BFS按层遍历,结果会是数组越短的越靠前,最后做个reverse即可。
不给这个方法,创建了太多集合。耗内存较大
1 | // 输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意:在返回值的list中,数组长度大的数组靠前) |
解法2
全局变量迭代法
利用全局变量的迭代避免创建过多的变量。
这个其实看到的一个优化的解法,理解他的解法后,而来的写法,他使用的是减法。
我使用的是加法 并且全局变量也多了一个,这样写一个变种写法,能够帮助自己更好的理解。
1 | public class Solution { |
复杂链表的复制
1 | 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) |
拆分步骤的方法
1 | // 复杂链表的复制 |
二叉搜索树与双向链表
1 | 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 |
解法1 中序遍历拆分递归
1 |
|
解法2 将递归改成非递归的中序遍历
1 | // 用栈结构进行中序遍历 每次保存前一个变量 |
Review 英文文章
kafka的介绍
Tip 技巧
https://blog.csdn.net/qq_41781322/article/details/82867116 centos7 修改mac地址
https://blog.csdn.net/ntuxiaolei/article/details/81130866 CentOS7 修改hostname,ip地址以及hosts(永久生效)