ARTS_17

什么是 ARTS?

  1. 算法(Algorithm): 每周至少一道 LeetCode 算法题,加强编程训练和算法学习
  2. 阅读(Review): 阅读并点评至少一篇英文技术文章,提高英文水平
  3. 技巧 (Tip):学习至少一个技术技巧,总结、归纳日常工作中遇到的知识点
  4. 分享(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:软件开发职业生涯指南》
推荐理由:

  1. 介绍软件开发者的如何入门,入门之后如何提高,怎样规划整个职业生涯,对于这些问题提供了一整套的可参考答案

英文:

  1. Things You Should Never Do, Part I – Joel on Software

分享理由:

  1. 不要轻易重写代码,这个行为在商业上毫无帮助
  2. It’s harder to read code than to write it. 读比写难,说大实话了呀
  3. 当说老项目一团糟时,有三种情况是错误的
    1. 架构问题:但是这些问题可以通过小心地移动代码、重构、更改接口逐一解决
    2. 效率低下:你可以优化那部分代码,而不需要全部重构
    3. 代码可能非常丑陋:但是用Emacs中的一个宏就能在五分钟内解决的问题,而不是从头开始。
    4. 重要的是要记住,当你从头开始的时候,绝对没有理由相信你会比第一次做得更好。首先,你甚至可能没有与第一版相同的编程团队,所以你实际上并没有“更多的经验”。你只会再次犯大多数旧的错误,并引入一些原始版本中没有的新问题。

三:技巧

13 | 影响了我二十年的三个原则-极客时间
分享理由:

  1. 闭环原则、谁难受谁推进,这两个原则我感触良多,且也在应用中,很好

四:分享

从起因到争议,在 AI 生成艺术元年聊聊 AI - 少数派

分享理由:

  1. AI滚滚而来,首先不会直接制造出一个超人,而是在细分领域进行变革,某些职业入门级的体力活注定要被淘汰,提前看下,给自己一个警示

你可能感兴趣的:(ARTS_17)