ARTS 第二周打卡
算法:
leetcode周赛的最后一题
赛场上没写出来,脱离算法竞赛已经有两年半了,中间自己零零散散的打过几次codeforces,看起来现在做思维题已经是不太在行了
应该给自己一点时间去补一补codeforces的题,稍微训练训练思维能力,否则leetcode周赛不能稳定四题的话,还是比较对不起以前的水平的
这次就是在思维上出了差错,虽然想到了是一根一根的放,但是由于没有考虑到放的顺序,当时我认为是从小的开始放,但是问题就变得复杂了很多
正解是从大的先放,这样换一个角度,问题就会简单很多
技术文章的话自己在上周也都有写,可以看我的博客
分享的话,正好今天我看到了一个面试题,说是问红黑树和B+树有什么区别,为什么map用红黑树而不是B+树
而且B树是不需要旋转的平衡树,看这篇文章讲解的比较清楚
B树用于外部排序,就是数据量较大的情况下,储存在文件中的排序
而红黑树则是储存在内存中,用于内部的排序,所以说应该是使用的数据量,场景不同
对于review的话,我最近看到几篇文章,他们有提出这样一个观点,说编译原理是CS生涯中比较重要的一个课程,学会做一个编译器可以对编程语言的理解提升
我个人目前来说并不是很赞同这个观点,我认为做出一个编译器确实可以练习自己的编程能力,毕竟一个好的编译器就是一个大的软件工程,这个观点在编译器设计这本书中就有提到
但是我不认为写出这个编译器就可以提升自己对编程语言的理解,比如我曾经写过的一个lisp解释器,写完后我并不认为我对lisp的理解有多么的深入
我认为自己对于编程语言的理解,在于我们是如果使用这个工具的,我认为提升自己对于编程语言的理解的方法有:阅读其他人,阅读高手写的代码,看高手是怎么运用这个工具的,看看别人的理解
还有就是语言设计者的讲述,比如书C++语言的设计与演化中,清楚的讲到了C++的用意,设计理念,这些对我理解C++有很大的帮助
文章评论