ARTS 第 42 周

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


Contents


Algorithm

167. Two Sum II - Input array is sorted

题目:167. Two Sum II - Input array is sorted

难度:Easy

题意:Given an array of integers that is already sorted in ascending order, find two numbers such that they add up to a specific target number.

The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2.

Note:

示例:

Input: numbers = [2,7,11,15], target = 9
Output: [1,2]
Explanation: The sum of 2 and 7 is 9. Therefore index1 = 1, index2 = 2.

解法:

介绍一个非常直观易懂的方法,这道题目比第一题要多出一个条件,就是给出的 numbers 数组是升序排列的,这样可以利用双指针法,简单明了地得出答案。

代码:

class Solution:
    def twoSum(self, numbers: List[int], target: int) -> List[int]:
        start, end = 0, len(numbers) - 1

        while start != end:
            sum = numbers[start] + numbers[end]
            if sum < target:
                start += 1
            elif sum > target:
                end -= 1
            else:
                return [start + 1, end + 1]

时间复杂度 O(N),空间复杂度 O(1)。


Review

These four “clean code” tips will dramatically improve your engineering team’s productivity

本周的文章来自 Medium,《These four “clean code” tips will dramatically improve your engineering team’s productivity》。文章参考了《代码整洁之道》,讲述了四条让你的代码变得更整洁的方法,并且有代码示例,非常值得一读:

  1. 「如果没有做测试,那它就是坏的」
  2. 取有意义的名字
  3. 类和函数应该尽量小,并遵守单一功能原则
  4. 函数不应该有副作用

Tips

R 中的 attachdetach 语句

在 R 中,我们经常会需要使用一个 dataframe 中的许多列来拟合回归,但每次都使用 dataFrame$col1dataFrame$col2 这样的方式未免有些麻烦,尤其是要重复对某些特定的列执行计算的时候,这样的方式既不直观,又不简洁。

我们可以使用 attach 语句,将对应的 dataframe 中的每一列直接添加到 R 的搜索路径中,这样可以直接使用对应的列名 col1col2 来执行计算。使用 detach 语句将这些变量从搜索路径中撤下。


Share

推荐一个将 Markdown 转换为 PPT slide 的软件——Deckset

做研究的时候,presentation 是一个必经的历程,使用 PPT 或者 Keynote 制作演示文稿就成了绕不开的话题,但是当我们需要同时展示研究思路、代码和实验结果的时候,PPT 和 Keynote 实际上并不好用。为此我尝试了不少其他方法。

首先我尝试了使用 LaTeX 制作 beamer 文稿,beamer 实际上是 PDF 文件,LaTeX 的优良特性让 beamer 可以支持许多格式的图表和代码。但 beamer 有两个问题,首先对于我这种颜值党,beamer 的几个默认的模板实在是不好看(如下图所示),第二,LaTeX 还是相对比较麻烦,尤其是在 Mac 上编译使用 LaTeX,用过的人都知道这有多痛苦。。

beamer

之后我接触了 R,RStudio 可以将 Rmarkdown 文档转化为演示文档,支持 beamer、HTML ioslide、HTML Slidy、PowerPoint 和 Shiny 文档。同时也支持内嵌 LaTeX 公式、R 代码高亮,制作出来的文档也还算精美。但这种方式也有一个缺点,就是如果要同时展示 R 和其他语言的代码的话,会造成其他 R 代码块显示混乱。。

RStudio

最近我发现了一款支持将 Markdown 转化为演示文稿的软件,叫做 Deckset,官网在这里。Deckset 支持一键将 Markdown 转化为演示文稿,有多种内置模板可以选择,支持 LaTeX,支持 代码高亮,并且支持自定义 CSS 文件,文档非常精美,目前来说我没有遇到什么麻烦,感兴趣的朋友可以上手一试。

Deckset