每周完成一个 ARTS:
Algorithm: 每周至少做一个 LeetCode 的算法题
Review: 阅读并点评至少一篇英文技术文章
Tips: 学习至少一个技术技巧
Share: 分享一篇有观点和思考的技术文章
题图:Photo by Wade Meng
难度: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)$。
本周阅读的文章比较轻松,我觉得实在有趣,决定分享给大家。这是一篇来自「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」域名使用如此频繁的原因、域名管理的争议以及域名之于企业的意义等相关话题,感兴趣的朋友可以点击链接阅读原文。
给大家推荐一个 Mac 上免费的壁纸软件「Irvue」。
因为图片源是 Unsplash,所以版权也不受限,可以任意下载使用。题图中的照片就是来自 Irvue 推荐的壁纸。
下载打开 Irvue 之后,你的桌面就会自动更换一张壁纸,同时你的状态栏中也会出现这样一个图标:
点击出现各种选项:
点击「Settings -> Profile」,选择「Log In」,接下来会弹出一个页面,选择「允许」,进入 Unsplash 官网,注册一个账号并登录,或者使用 Google/Facebook 登录,就可以使用了。
Irvue 还允许你设置频道,点击选项中的「Channel」,点击加号,在弹出窗口中粘贴你在 Unsplash 上挑选的「Collections」对应的 URL 即可。如果嫌麻烦可以安装浏览器插件。
每个人可以免费添加 3 个频道,付费解锁更多。
你还可以一键将当前壁纸下载到本地,只要提前设置好下载位置就可以啦:
下面放几张好看的壁纸吧,不用 Mac 的朋友可以戳我私发哦!
再放一张自己拍的😎,2018 年 3 月 4 日摄于奥地利小镇哈尔施塔特,设备 iPhone 6s,原图😎(这张禁止任何形式的转载和使用):
本周分享一个学生朋友们可以「薅」的羊毛:GitHub 的 Student Developer Pack。
这是个名副其实的「软件包」,因为它打包了非常多提供给学生的软件或服务的使用权,只要使用校园邮箱绑定你的 GitHub 账号,就可以申请获得这个软件包。
GitHub Student Developer Pack 包含非常多的学生福利:
个人感觉比较有用的:
具体如何申请和使用,大家可以自行探索,如有问题也可私信我。
此外,越来越多的企业和服务也推出了针对学生的优惠政策,像苹果、微软都有返校季购机优惠,阿里云、腾讯云、华为云等也都有对应的学生价,AutoDesk、MATLAB 等专业软件也提供了教育版本,极客时间也有所有专栏半价的学生认证,甚至很多开发商,你使用教育邮箱向其求助,他们都会很乐意给你一个授权码。
作为一个受过高等教育的成年人,理应懂得尊重他人劳动成果的重要性。另外,除了今天介绍的这些教育优惠,我们还有非常多的开源服务可以使用。请大家支持正版,也拥抱开源。