ARTS 打卡 第 1 周
Algorithm 一道算法题;
Review 阅读并点评一篇英文文章;
Technique/Tips 是分享一个技术技巧;
Share 是分享一篇有观点和思考的技术文章。
Algorithm
leetcode-26 删除排序数组中的重复项
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
示例 1:
给定数组 nums = [1,1,2],
函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。
你不需要考虑数组中超出新长度后面的元素。
示例 2:
给定 nums = [0,0,1,1,1,2,2,3,3,4],
函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。
你不需要考虑数组中超出新长度后面的元素。
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array
解题思路:
1.给定的数组是已经排好序的,这点很重要;所以,相同的元素一定会排列在一起。
2.题目要求不能使用额外的空间,所以要对数组元素做原地修改。
3.根据以上两点,需要创建两个索引,一个读取数组(读索引),一个修改数组(写索引)。
4.利用读索引遍历数组,若读取到的数字与写索引的值不同,则将写索引的下一个位置修改为读索引的值,直到遍历完毕。
Review
这次学习了这篇经典http://norvig.com/21-days.html#answers,这同时也是耗子叔推荐的文章。
这篇文章分析了为什么现在的人这么急功近利,只想用很短的时间,就掌握一门编程语言或是一项技能;作者明确的给出了答案:
So the book can only be talking about a superficial familiarity, not a deep understanding.
很短的时间内,只能肤浅的熟悉,而不能深刻的理解。
那怎么样才能真正的成为编程专家呢,作者的答案是,长时间的刻意练习!
关于刻意练习,最有名的是同名书《刻意练习》,这本书的观点跟本文如出一辙:要想在编程或者其他方面成为专家,只看速成教程是不够的,需要长时间的实践,练习,反馈,根据结果不断调整。经过几年以后,才能有所成果,这也是本文的标题,花十年时间学习编程的由来。
这篇文章也被喻为自学编程的神文。
Tips
记录一下学习的计算机组成原理的知识:
局部性原理:
我们不能既享受CPU Cache的速度,又享受内存、硬盘巨大的容量和低价呢?答案是可以,采用存储器中数据的局部性原理。
时间局部性:如果一个数据被访问了,那么它在短时间内还会被再次访问。
空间局部性:如果一个数据被访问了,那么和它相邻的数据也很快会被访问
利用局部性原理,我们在两个层级之间,加入缓存层,有效的提升数据的访问效率。
Share
分享一篇耗子叔的文章吧,https://coolshell.cn/articles/20793.html
关于CPU的缓存方面的知识讲述的相当通俗,后面的延伸阅读需要再画时间学习一下。
评论