ARTS 第 40 周

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


Contents


Algorithm

326. Power of Three

题目:326. Power of Three

难度:Easy

题意:Given an integer, write a function to determine if it is a power of three.

示例 1:

Input: 27
Output: true

示例 2:

Input: 0
Output: false

示例 3:

Input: 9
Output: true

示例 4:

Input: 45
Output: false

Follow up: Could you do it without using any loop / recursion?

解法:

首先我们来使用一个最直接的方法,将 n 不断除以 3,直到最后的结果不大于 3,如果这个过程中出现余数不为 0 的情况,就说明这个数不是 3 的幂数,最后的结果如果不是 1 或者 3,那么也说明这个数不是 3 的幂数。

代码:

class Solution:
    def isPowerOfThree(self, n: int) -> bool:
        while n > 3:
            if n % 3 == 0:
                n /= 3
            else:
                return False

        return n == 3 or n == 1

时间复杂度 O(log N)。

我们再来看一个题解中给出的答案:题解使用了 Java ,由于 Java 中,在 int 能表示的最大整数范围内,3 的最大的幂数为 1162261467,那么只要 n 能够整除 1162261467,就说明 n 是 3 的幂。:

public class Solution {
    public boolean isPowerOfThree(int n) {
        return n > 0 && 1162261467 % n == 0;
    }
}

在 Python 中,将这个 1162261467 换成 3^39 即可。

class Solution:
    def isPowerOfThree(self, n: int) -> bool:
        return (n > 0) and (3**39 % n ==0)

时间复杂度为 O(1)。


Review

3 facts about time series forecasting that surprise experienced machine learning practitioners.

本周阅读的文章来自于 Medium 上 Towards Data Science 专栏,《3 facts about time series forecasting that surprise experienced machine learning practitioners》。

这篇文章非常容易阅读,基本上没有什么生词难句,但文章内容却极具启发意义。作者在文章中提出了三个会使机器学习大师惊讶的时间序列预测问题:

  1. 每次你要生成一个新的预测值的时候,你都要重新训练你的模型
  2. 有时候你需要取消训练集与测试集的划分
  3. 预测的不确定性和预测本身同样重要,甚至更重要

作者在文章中对这三点都进行了详细的描述和论证,在评论区也对粉丝的问题作了详尽的解答与扩展。说实话这三点虽然在研究过程中我也会有明显的感觉,但这篇文章还是提纲挈领,点出了三个重要的事实。做时间序列的朋友强烈建议一读。


Tips

VS Code 与其他 Mac 应用共享搜索记录

打开 VS Code 的设置中的这两项:

就像功能描述中说的那样,打开这个功能之后,你在 VS Code 中的搜索关键词和搜索记录,就会被共享给系统剪贴板,之后打开一些支持这个功能的其他应用,按下 Cmd + F 键,同样的搜索关键词会被自动填充到搜索框中。目前测试 Mac 自带的办公三件套 Pages、Keynote、Numbers 以及 Safari 和 Chrome 是支持的,其他应用欢迎补充。


Share

VS Code 中的搜索和替换

在 VS Code 中,按下 Cmd + F 可以执行搜索,这个时候会调出搜索框,如下图所示:

VS Code 搜索框

这时候你开始打字的话,VS Code 就会开始搜索搜索框中指定的内容了,VS Code 会默认将你光标所在之处的单词作为关键词进行搜索。按下回车键可以在所有的搜索结果之间来回跳转。接下来只要点击编辑器中对应的单词就可以进行修改了。

但有人还是会觉得,搜索完之后还是要使用鼠标点击一下搜索结果,才能进行修改,太麻烦了。那么这个时候你就需要 Cmd + G 出场了。其实 Cmd + GCmd + F 功能一样,只是在你按下 Cmd + G 之后,你会发现你的光标停留在编辑器中,通过连续按下 Cmd + G,你就可以直接打字对代码进行修改了。

在搜索框中,你还会看到几个特殊的配置按钮,从左至右它们分别是:

  1. 大小写敏感:VS Code 的搜索默认对大小写不敏感,点击这个按钮可以设置对大小写敏感;
  2. 全单词匹配:有时候我们搜索的单词如果是别的单词的一部分,VS Code 是默认展示这些单词的搜索结果的,点击这个按钮可以关闭全单词匹配;
  3. 正则表达式:使用正则表达式来搜索结果,VS Code 使用的是 JS 的正则引擎。

最后,在上下箭头的后面,还有一个由三条横线组成的按钮,这个按钮的意思是:选中代码中的一段,然后按 Cmd + F 调出搜索框,点击这个按钮,就只会在你选定的这段代码中进行搜索。