什么是 ARTS?
- 算法(Algorithm): 每周至少一道 LeetCode 算法题,加强编程训练和算法学习
- 阅读(Review): 阅读并点评至少一篇英文技术文章,提高英文水平
- 技巧 (Tip):学习至少一个技术技巧,总结、归纳日常工作中遇到的知识点
- 分享(Share):分析一篇有观点和思考的技术文章,建立影响力,输出价值观
时间周期
2022年3月7日至3月13日
一:算法:
对称二叉树
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1
/ \
2 2
/ \ / \
3 4 4 3
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
1
/ \
2 2
\ \
3 3
进阶:
你可以运用递归和迭代两种方法解决这个问题吗?
前置知识 思路: 遍历每一个节点的时候,如果可以通过某种方法知道它对应的对称节点是谁,这样的话直接比较两者是否一致就可以了。 因此可以两遍遍历,第一次遍历的同时将遍历结果存储到哈希表中,然后第二次遍历去哈希表取值。这种思路可以,但是需要N的空间。 如果两者同时进行遍历,是不是就省去了哈希表的开销。
代码
JavaScript 实现及其拓展资料
function isSymmetric (root) {
return check(root, root)
}
function check (p, q) {
if (p == null && q == null) {
return true
}
if (p == null || q == null) {
return false
}
return p.val == q.val && check(p.left, q.right) && check(p.right, q.left)
}
Java 实现及其拓展资料
class Solution {
public boolean isSymmetric(TreeNode root) {
return check(root, root);
}
public boolean check(TreeNode p, TreeNode q) {
if (p == null && q == null) {
return true;
}
if (p == null || q == null) {
return false;
}
return p.val == q.val && check(p.left, q.right) && check(p.right, q.left);
}
}
Go实现及其拓展资料
func isSymmetric(root *TreeNode) bool {
return check(root, root)
}
func check(p, q *TreeNode) bool {
if p == nil && q == nil {
return true
}
if p == nil || q == nil {
return false
}
return p.Val == q.Val && check(p.Left, q.Right) && check(p.Right, q.Left)
}
二:阅读,英文技术文章
5 Whys原则:出现问题时强迫自己进行深入思考 Root Cause Analysis - The 5 Whys Technique
我的总结: 选这篇英文文章单纯是的在分享中提到了5 Whys思考方式,然后我有查阅了一些文档,发现英文对其解释通俗易懂,既能提高下英文,也能学习一种新的思考方法,一箭双雕
三:技巧
你真的会问问题吗? 文章链接:02 | 你真的会问问题吗?-极客时间 搭配阅读:提问的智慧:github.com/ryanhanwu/H…
我的总结: 好的问题等于答案的一半,尤其是作为程序员,遇到问题(bug)、解决问题(bug)几乎是程序员的工作日常,如果更好的通过解决问题来成长,程序员几乎天然需要这个问问题的方式
四:分享
使用简单的逻辑方法进行独立思考 文章链接:coolshell.cn/articles/20…
我的笔记:
-
这个文章讲了什么? 如何在这个复杂的世界里使用简单的逻辑进行独立思考
-
作者具体是如何说的? 作者使用数学逻辑的方式进行思考,可具体分为五步: 第一步:信息数据可考证。对于一个观点或见解,首先要进行的是数据的查证,Wikipedia会是个好地方
第二步:处理集合和其包含关系。比如:哲学家是人,柏拉图是哲学家,所以,柏拉图是人。避免地图炮、否定整个人等简单的思考方式
第三步:处理逻辑因果关系:要分辨充分条件、必要条件和充分必要条件,然后处理其中的逻辑是否有关联性,而且有非常强的因果关系。比如:因果关系是经常被模糊和偷换的,努力并不直接导致成功,加班并不直接增加产出
第四步:找到靠谱的基准线:就像写代码遵循业界最佳实践,所以做事或看书时,找到世界或国际的通行标准,以此为基础进行下一步行动
第五步:更为深入和高纬的思考。不只是在表面进行思考,在思考时对自己进行5个为什么的提问(参考这篇文章的解释:Root Cause Analysis - The 5 Whys Technique)
-
作者说的有道理吗?是全部有道理,还是部分有道理? 作者说的很有道理,他的五步思考方式真的好,我要学习并应用起来,我现在越发感觉自己从智力和精力上都是普通人,只能靠习惯+学习其他人好的方法来弥补了。运用他的五步思考法,真的能够解决我自己长久以来的某些问题
-
这篇文章跟我的关系 更新迭代我的思维方法,真的很重要。年纪到了,精力和智力都大不如前的情况下,要从其他方向上进行弥补了,而思考方式就是我要弥补的一个方向