ARTS 第 46 周

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

题图:Photo by Luca Bravo

Contents

Algorithm

345. Reverse Vowels of a String

题目:345. Reverse Vowerls of a String

难度:Easy

题意:

Write a function that takes a string as input and reverse only the vowels of a string.

示例 1:

Input: "hello"
Output: "holle"

示例 2:

Input: "leetcode"
Output: "leotcede"

Note:

The vowels does not include the letter “y”.

解法:

这一题与之前的 344. Reverse String 不同,只要求交换字符串中的元音字符,即「a、e、i、o、u」(经测试还有大写的「A、E、I、O、U」)。那么思路其实比较简单就是交换首尾的两个元音字母的位置即可,那么我们想到用双指针法。思路如下:

首先需要建立一个查找的范围,即元音字符的范围;然后因为我们需要对字符串进行修改,所以先将其转换为列表类型;然后使用双指针法,遍历验证两个指针指向的字符是否存在于查找范围之中,如果存在,那么交换两者位置,否则继续遍历。

代码:

class Solution:
    def reverseVowels(self, s: str) -> str:
        vowels = 'aeiouAEIOU'
        s = list(s)
        i, j = 0, len(s) - 1
        while i < j:
            if s[i] not in vowels:
                i += 1
            elif s[j] not in vowels:
                j -= 1
            else:
                s[i], s[j] = s[j], s[i]
                i += 1
                j -= 1
        return ''.join(s)

时空复杂度 $O(n)$。

Review

6 Habits of Super Learners

这周的文章来自 Medium,《6 Habits of Super Learners》。讲述了在二十一世纪保持领先——成为超级学习者的六个习惯,它们分别是:

  1. 超级学习者大量阅读
  2. 超级学习者把学习视作一个过程
  3. 他们采用一种发展的心态
  4. 超级学习者会教别人他所知道的东西
  5. 高效学习者都很注意保护他们的大脑
  6. 他们进行短暂的休息,早且频繁

这是 Medium 上一篇典型的鸡汤文,但又不那么古板,文章中还是有不少值得参考借鉴之处,推荐阅读。

译文请看次条。

Tips

分享一段在 R 中一键安装并加载所需标准库的代码

在 R 中,当我们需要使用一个第三方标准库的时候,我们首先需要进行安装:

install.packages(PACKAGE_NAME)

这里我们可以同时安装多个第三方库,只要使用 c() 将不同的库的名称括起来即可。接下来我们需要加载这个第三方库:

library(PACKAGE_NAME)

这一步一次只支持加载一个第三方库。

为了简化这个流程,并且要能一次性加载多个库,我自己编写了一段代码:

Install_And_Load <- function(packages){
  k <- packages[!(packages %in% installed.packages()[, "Package"])];
  if (length(k)) {
    install.packages(k, repos = 'https://cran.rstudio.com/');
  }
  for (lib_name in packages) {
    library(lib_name, character.only = TRUE, quietly = TRUE)
  }
}

使用这个函数有两种方式:

  1. 直接将这个函数粘贴在 R 代码中,然后在之后的代码中调用;
  2. 将这段代码另存为一个 R 文件,命名为「Install_And_Load.R」,放入你的工作路径中,调用之前使用 source('Install_And_load.R') 将其加载进来,然后调用。

请类比 install.packages() 的格式进行调用:

Install_And_Load(c('PACKAGE1', 'PACKAGE2', ...))

Share

分享 Markdown Nice 排版工具的使用体验

在之前的一期打卡分享中,我分享了一个在线的 Markdown 排版工具「Markdown Nice」,说好了使用几周之后放上使用体验报告,这就来了。

Markdown Nice 不仅支持微信公众号,还支持知乎、开源中国、稀土掘金等多个平台,它本身也是一款开源服务,可以在 Github 上查看源代码。

Markdown Nice 示例

从功能上看,Markdown Nice 拥有一整套从「Markdown 到公众号」的排版流程,提供了包括「微信外链转脚注」等非常实用的功能,能够高效率完成微信公众号排版。Markdown Nice 还支持多种样式,当然也支持自定义样式啦。

另外,Markdown Nice 近期发布了浏览器插件,可以支持在公众号中直接转换 Markdown 文档,再也不需要进行复制粘贴了。

WeChat QRCode