ARTS 第 45 周

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

题图:Photo by Wade Meng

Contents

Algorithm

219. Contains Duplicate II

题目:219. Contains Duplicate II

难度:Easy

题意:Given an array of integers and an integer k, find out whether there are two distinct indices i and j in the array such that nums[i] = nums[j] and the absolute difference between i and j is at most k.

示例 1:

Input: nums = [1,2,3,1], k = 3
Output: true

示例 2:

Input: nums = [1,0,1,1], k = 1
Output: true

示例 3:

Input: nums = [1,2,3,1,2,3], k = 2
Output: false

解法:

本题是上周题目的船新版本,但是不能用上周的「排序后检查是否存在两个相同的相邻元素」的方法来解决,原因是本题涉及到元素的相对位置,排序后这个信息就丢失了。本题的解决方法,是利用上周第二个解法思路,空间换时间,建立一个查找表,将元素和对应的位置存储下来,然后看下一个元素是否存在查找表中,如果存在,那么检查相对距离,如果小于 k,返回 True,否则更新这个元素在查找表中的值;如果直到遍历完毕都没有找到符合的两个元素,就返回 False

代码:

class Solution:
    def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
        dict1 = {}
        for i, num in enumerate(nums):
            if num not in dict1:
                dict1[num] = i
            else:
                if i - dict1[num] <= k:
                    return True
                dict1[num] = i
        return False

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

Review

Tropical Breezes, Pristine Beaches and a Domain Name to Die For

本周阅读的文章比较轻松,我觉得实在有趣,决定分享给大家。这是一篇来自「The New York Times」的文章《Tropical Breezes, Pristine Beaches and a Domain Name to Die For》。

就像「.cn」之于中国、「.fr」之于法国、「.ca」之于加拿大、「.de」之于德国,这篇文章的主角,英属安圭拉岛,位于加勒比海的英国的十四个海外领土之一,拥有「.ai」这样一个域名后缀。得益于近几年人工智能领域的蓬勃发展,每一个新注册或更新的「.ai」的域名,都向这个座小岛的政府贡献了财政收入。

Every time a .ai name is registered or renewed — by A.I. start-ups, or by speculators hoping to resell the names to those start-ups, big companies or investors — the island collects a $50-a-year fee, which goes mostly to the government treasury.

2018 年,这个收入的数字是 290 万美元,相当于 129 个当地小学老师、员工和行政人员一年的工资(= =|||,人均 2.2w 刀/年?)。

文章还讨论了「.ai」域名使用如此频繁的原因、域名管理的争议以及域名之于企业的意义等相关话题,感兴趣的朋友可以点击链接阅读原文。

Tips

推荐一个壁纸软件 Irvue

给大家推荐一个 Mac 上免费的壁纸软件「Irvue」。

因为图片源是 Unsplash,所以版权也不受限,可以任意下载使用。题图中的照片就是来自 Irvue 推荐的壁纸。

Irvue App

下载打开 Irvue 之后,你的桌面就会自动更换一张壁纸,同时你的状态栏中也会出现这样一个图标:

Irvue Icon

点击出现各种选项:

Irvue Options

点击「Settings -> Profile」,选择「Log In」,接下来会弹出一个页面,选择「允许」,进入 Unsplash 官网,注册一个账号并登录,或者使用 Google/Facebook 登录,就可以使用了。

Manage Channels

Irvue 还允许你设置频道,点击选项中的「Channel」,点击加号,在弹出窗口中粘贴你在 Unsplash 上挑选的「Collections」对应的 URL 即可。如果嫌麻烦可以安装浏览器插件。

Add channels

每个人可以免费添加 3 个频道,付费解锁更多。

你还可以一键将当前壁纸下载到本地,只要提前设置好下载位置就可以啦:

Download

下面放几张好看的壁纸吧,不用 Mac 的朋友可以戳我私发哦!

WP1

WP2

WP3

WP4

WP5

WP6

再放一张自己拍的😎,2018 年 3 月 4 日摄于奥地利小镇哈尔施塔特,设备 iPhone 6s,原图😎(这张禁止任何形式的转载和使用):

哈尔施塔特

Share

GitHub Student Developer Pack 介绍

本周分享一个学生朋友们可以「薅」的羊毛:GitHub 的 Student Developer Pack

GitHub Student Plan

这是个名副其实的「软件包」,因为它打包了非常多提供给学生的软件或服务的使用权,只要使用校园邮箱绑定你的 GitHub 账号,就可以申请获得这个软件包。

GitHub Student Developer Pack 包含非常多的学生福利:

GitHub Student Developer Pack

个人感觉比较有用的:

具体如何申请和使用,大家可以自行探索,如有问题也可私信我。

此外,越来越多的企业和服务也推出了针对学生的优惠政策,像苹果、微软都有返校季购机优惠,阿里云、腾讯云、华为云等也都有对应的学生价,AutoDesk、MATLAB 等专业软件也提供了教育版本,极客时间也有所有专栏半价的学生认证,甚至很多开发商,你使用教育邮箱向其求助,他们都会很乐意给你一个授权码。

作为一个受过高等教育的成年人,理应懂得尊重他人劳动成果的重要性。另外,除了今天介绍的这些教育优惠,我们还有非常多的开源服务可以使用。请大家支持正版,也拥抱开源。

微信公众号