ARTS 2.0 第 2 周

每周完成一个 ARTS:
Algorithm: 每周至少做一个 LeetCode 的算法题
Review: 阅读并点评至少一篇英文技术文章
Tips: 学习至少一个技术技巧
Share: 分享一篇有观点和思考的技术文章

题图:

Contents

Algorithm

107. Binary Tree Level Order Traversal II

题目:Binary Tree Level Order Traversal II

难度:Easy

题意:Given a binary tree, return the bottom-up level order traversal of its nodes’ values. (ie, from left to right, level by level from leaf to root).

示例:

Given binary tree [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

return its bottom-up level order traversal as:

[
  [15,7],
  [9,20],
  [3]
]

解法:

这道题转换一下思路的话还是很简单的,只需要从上到下简单遍历一下树,再反向输出即可。

代码:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def levelOrderBottom(self, root: TreeNode) -> List[List[int]]:
        if root is None:
            return []
        
        res, cur = [], [root]

        while cur:
            next_lvl, vals = [], []
            for node in cur:
                vals.append(node.val)
                if node.left:
                    next_lvl.append(node.left)
                if node.right:
                    next_lvl.append(node.right)
            cur = next_lvl
            res.append(vals)
        
        return res[::-1]

Review

7 Signs of Low Self-Esteem

这周 Medium 的一篇高赞文章吸引了我的注意《7 Signs of Low Self-Esteem》。似乎中外都一样,文章套路很相似,例如《在 2020 年你一定需要知道的 xx 个 xx》or《xx 个技巧/书/工具帮助你 xxxx》,一般遇到这种文章我都划过去了,但这周的这篇,在偶然点进去之后,发现一些话确实说到了我的心坎里。《7 个低自尊的表现》:

  1. 你根据你的过去定义自己
  2. 在你的激情上拖延
  3. 对别人吹毛求疵
  4. 不愿意与别人建立健康的边界(即不会拒绝)
  5. 对微小的决策思前想后
  6. 依赖别人来感觉良好
  7. 很难接受赞扬

其中我比较受益的是第三条。我也需要时刻提醒自己:

每当你想要批评别人时,你要记住,这个世界上所有的人,并不是个个都有过你拥有的那些优越条件。

尽管菲茨杰拉德的原意可能并非如此,尽管我们不可能事事时时都站在道德的绝对安全区里。

Tips

Suppress warnings from the output of Python

最近的研究中用到了 sktime 这个做时间序列处理的第三方库,有着与 sklearn 兼容的界面和相似的模块,并且对 statsmodels 的不少实用模块做了打包,做时间序列处理的同学一定要试一试。

由于 sktime 不少功能都基于 statsmodels,一些模块会根据 statsmodels 的开发进行适配,所以有些 deprecated functions 的问题,计算结果输出时经常会遇到 future warnings;另外 sktime 还在积极的开发中,部分功能也没有很好地实现,所以这方面也时常会有报错或者警告。当我在遇到警告时,如果代码没问题,警告仅仅是影响了输出,那么我会使用以下方法来将忽略警告:

import warnings

def fxn():
    warnings.warn("deprecated", DeprecationWarning)

with warnings.catch_warnings():
    warnings.simplefilter("ignore")
    fxn()

上面这段代码会忽略所有 deprecated functions 的警告。如果你想忽略所有警告,你可以用:

import warnings
warnings.filterwarnings("ignore")

Share

我为什么读博

写这个话题其实是因为觉得之前拟定的「分享几个实用的快捷指令」实在是有些敷衍,虽然和瑞瑞同学聊起 ARTS 时表示「不能给自己太大的心理预期,否则不容易坚持下来」,但最近实在是有些怠惰,把这个话题写清楚也能从更深的层面上激励自己(尽管今天并不是一个写这个话题的好时机🙃)。

看了看知乎「你们都为什么读博」这个问题的讨论,有学物理的说情怀,有转码的找工作留美,也有逃避找工作的 or 纯粹因为博士毕业工资比较高的。可能大部分人读博士都是类似的原因,说一个好朋友 GG 的故事好了。

GG 是我法国的直系学长,搞室内定位算法的,一头光光的头发,憨厚可爱(说到这在法国认识我的人大概都知道我说的是谁了吧🌚)。工程师学校的毕业实习,GG 为公司解决了一个卡了技术 Leader 很久的关键问题,Leader 觉得 GG 大有可为,遂资助其读博。GG 也爽快地答应了。后来 GG 告诉我,他当时花了很久看了一篇公司引用的论文,觉得其中的技术细节没有讲明白,于是给这个论文的作者,一个印度数学家发了封邮件,没想到这个数学家居然回复了,还顺带解决了公司的问题。GG 读博两年多了,除了睡觉抽烟打刀塔做菜和买 Sandro,剩下的时间都在搞学习。我问 GG:你为啥读博?GG 告诉我:没读博士之前,我觉得博士很屌,都是阴差阳错。还说读上以后,发现博士都是你这样的肥宅。。。

记得大概两年前,在朋友圈看到有人分享这么一句话「如果你读博不是为了搞学术,那么读博的过程一定不是你想的那样。」两年前毕业找实习的时候,就在纠结是回国工作还是留下来继续读博。当时的想法大致如下:既然都在这边待了这么久,为什么不再坚持几年,拿个博士学位再回国(沉没成本+博士学位本身);现在海归硕士越来越多,竞争越来越激烈,工资也就那样(工资因素);博士学完回国还能去学校当个老师,进高校(前途考虑), etc. 其实读到一半,现在想想,不管是不是为了搞学术,读博的过程都不是我们想象的那样,甚至于生活都从来不是我们想象的那样,经历了 2020 年的我们一定深有体会。我深思以后,认为自己读博的初衷,在当时只想到了一半,即「拿博士学位」这件事,另一半,经过这一年多的学习,我认识到我确实想为人类做出一点贡献。下面这个图,很多人都见过,读研读博的过程,就是在你的子子领域做出一点点突破的尝试的过程。

PhDing

生活是个 Random Walk,我们努力在其中寻找确定性的东西,它们足以温暖充满变数的当下。

共勉。

PS:GG 说要给我送  Watch 当圣诞礼物。。。

WeChat QRCode