每周完成一个 ARTS:
Algorithm: 每周至少做一个 LeetCode 的算法题
Review: 阅读并点评至少一篇英文技术文章
Tips: 学习至少一个技术技巧
Share: 分享一篇有观点和思考的技术文章 —-Contents:
- Algorithm: LeetCode 80. Remove Duplicates from Sorted Array II
- Review: I wanna be a data scientist, but… how!?
- Tip: 在 Chrome 上开启并行下载
- Share: 朋友的观点
80. Remove Duplicates from Sorted Array II
难度:Easy
题意:给定一个有序数组 nums
,原地 移除重复元素,每个元素在新数组中只出现 两次。要求不能给另一个数组分配额外的内存空间,所以必须以 O(1) 的空间复杂度 原地更改 输入数组。
例子 1:
Given nums = [1,1,1,2,2,3],
Your function should return length = 5, with the first five elements of nums being 1, 1, 2, 2 and 3 respectively.
It doesn't matter what you leave beyond the returned length.
例子 2:
Given nums = [0,0,1,1,1,1,2,3,3],
Your function should return length = 7, with the first seven elements of nums being modified to 0, 0, 1, 1, 2, 3 and 3 respectively.
It doesn't matter what values are set beyond the returned length.
解法: 本题和之前的第 26 题基本一样,只是在细节上有一点不同,也是使用双指针法来解。指定两个指针,慢指针指向第 2 个元素,快指针指向第 2 个元素。这里注意到这个数组是有序的,所以从[慢指针-2位置]开始到[慢指针-1位置],这两个位置的元素不论是否相同,都是符合题意要求的,快指针一直判断自己所在位置的元素是不是和[慢指针位置-2]所在的元素相同:若相同,快指针后移,若不同,把快指针所在位置的元素赋给慢指针所在的元素,快慢指针均后移。
class Solution(object):
def removeDuplicates(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
count = 2
for i in range(2, len(nums)):
if nums[count-2] != nums[i]:
nums[count] = nums[i]
count += 1
return count
时间复杂度 O(N),空间复杂度 O(1)。
I wanna be a data scientist, but… how!?
这周选的文章是 Medium 上面的一篇讲述「如何一步一步成为一个数据科学家」的文章。
作者在文章开头用一张「地铁图」展示了数据科学的众多工作技能之间的关联。
作者列举了数据科学领域经常出现的一些技能:
以及:
作者说,其实这些附加技能(soft-skills)才能真正将你与其他人区分开来。另外,作者还列举回答了几个问题:
我需要一个硕士学位吗? 不是必须。网络上有足够的信息能让你变成一个大牛。
但是公司在寻找一些经过额外训练和认证的人才… 重要的是展示你的知识,而非头衔。技术面试官会评估你关于所需知识的掌握程度,你要做的就是向他们证明你就是他们要找的人。
作者接下来介绍了学习成为一个数据科学家的路径:
一些技巧:
最后一个技巧:这个旅途很长,所以尽可能地把它看成一个半程马拉松,而不是一个竞速跑。
在 Chrome 上开启并行下载
Chrome 是自带并行下载功能的,开启方式如下:
在地址栏输入 chrome://flags/,然后在搜索框中输入 Parallel downloading,选择 enabled,重启 Chrome 即可。
最近在思考读博士和做事情的意义。看到一位朋友在朋友圈中的分享,觉得非常有感触,摘录如下:
作为一个正在读博的告诉你,读博的人每个人都有每个人的打算,但是有一点是肯定的,如果你不想去高校当老师的话,那么读博的过程一定不是你想象中的那样。前两天看王耀林发了一句话,这辈子越晚接触那些牛逼闪闪的人,这辈子可能越幸福。现在无比赞同。我觉得每个人最终干什么可以成功一定是他的性格和这个事情所需要的相匹配。不匹配的话再努力都不太可能成功。一个人做事不心狠手辣不在斗争中鱼死网破他做不到顶尖的位置,大多数人只看到了他坐在顶尖的位置,却没看到自己的性格与他性格之间的不同。大家只是想成为他那样的人,可先不说自己适不适合朝那个方向努力,就算做到了那,逼自己变成那个样子值不值得自己是要好好考量一下的。
朋友的这段话有一些我比较赞同,有一些我则有自己的观点: