ARTS_17
2022-10-23 本文已影响0人
本一和他的朋友们
什么是 ARTS?
- 算法(Algorithm): 每周至少一道 LeetCode 算法题,加强编程训练和算法学习
- 阅读(Review): 阅读并点评至少一篇英文技术文章,提高英文水平
- 技巧 (Tip):学习至少一个技术技巧,总结、归纳日常工作中遇到的知识点
- 分享(Share):分析一篇有观点和思考的技术文章,建立影响力,输出价值观
时间周期
10月17日至10月23日
一:算法:
二叉树数据结构TreeNode可用来表示单向链表(其中left置空,right为下一个链表节点)。实现一个方法,把二叉搜索树转换为单向链表,要求依然符合二叉搜索树的性质,转换操作应是原址的,也就是在原始的二叉搜索树上直接修改。
返回转换后的单向链表的头节点。
示例:
输入: [4,2,5,1,3,null,6,0]
输出: [0,null,1,null,2,null,3,null,4,null,5,null,6]
提示:
节点数量不会超过 100000。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/binode-lcci
前置知识
- 二叉查找树
- 递归
- 二叉树的遍历
思路:
实际上是一个考察二叉树遍历+二叉搜索(查找)数性质的题目。这类题目特别需要注意的是指针操作。
首先我们要知道一个性质:对于一个二叉查找树来说,其中序遍历结果是一个有序数组。而题目要求你输出的恰好就是有序数组(虽然没有明说,不过从测试用例可以看出)。
因此一个思路就是中序遍历,一边遍历一边改变指针即可
var converBiNode = function (root) {
let head = null
let cur = null
function traverse (node) {
if (!node) {
return null
}
traverse(node.left, node)
if (!head) {
head = node
cur = head
} else {
cur.right = node
cur = node
cur.left = null
}
traverse(node.right, node)
}
traverse(root)
return head
}
二:阅读
中文:《软技能2:软件开发职业生涯指南》
推荐理由:
- 介绍软件开发者的如何入门,入门之后如何提高,怎样规划整个职业生涯,对于这些问题提供了一整套的可参考答案
英文:
分享理由:
- 不要轻易重写代码,这个行为在商业上毫无帮助
- It’s harder to read code than to write it. 读比写难,说大实话了呀
- 当说老项目一团糟时,有三种情况是错误的
- 架构问题:但是这些问题可以通过小心地移动代码、重构、更改接口逐一解决
- 效率低下:你可以优化那部分代码,而不需要全部重构
- 代码可能非常丑陋:但是用Emacs中的一个宏就能在五分钟内解决的问题,而不是从头开始。
- 重要的是要记住,当你从头开始的时候,绝对没有理由相信你会比第一次做得更好。首先,你甚至可能没有与第一版相同的编程团队,所以你实际上并没有“更多的经验”。你只会再次犯大多数旧的错误,并引入一些原始版本中没有的新问题。
三:技巧
13 | 影响了我二十年的三个原则-极客时间
分享理由:
- 闭环原则、谁难受谁推进,这两个原则我感触良多,且也在应用中,很好
四:分享
分享理由:
- AI滚滚而来,首先不会直接制造出一个超人,而是在细分领域进行变革,某些职业入门级的体力活注定要被淘汰,提前看下,给自己一个警示