Monthly Archives: May 2021

Leetcode 700题纪念

最近几年在这个上面花了可能有上千个小时了, 是一个值得纪念的里程碑。

起源

说来惭愧, 大学期间完全没有听过过OJ这个东西,直到毕业几年逛论坛才知道有这么个东西,从最初的想破脑袋也解不了,到现在的看到题目就有个基本思路。但是做这些题目有意义吗?实际工作会有这么的问题需要解决吗?工作中确实没有用到这些技能,不过对复杂问题的分解,对性能的追求,对简洁完善的代码的追求,对边界条件的处理等,这些每天都用得到的技能,是我最大的收获。

另外,最近看了些Redis的源码,里面花式操作链表非常熟悉,在LC上有不少相关的题目。

几年前一次偶然的机会,得到了一个神秘的代码挑战,google foobar invitation,激发了我对OJ的兴趣。 这个挑战一点都不简单,前面的2个问题我还能应付,后面的几个我当时参考了别人的答案, 一个是最大流算法,一个是Markov chain的问题,放到现在我有信心解这2个题目。

下一步

前面几年没有太多时间刷题,工作考证健身学习等花了我大部分的时间。 疫情期间在家办公,省去了通勤时间,且出门次数更少,使我有比较多的时间来刷题。最近一年有1500+次提交。后面我可能不会再这么频繁的提交了,要把时间花再其他方面了。比如最近很感兴趣的分布式系统。

这几个月开始参加LC contest,也从最开始的俩题,现在基本稳定在三个题目,有次还意外的全部AC,不过后面有个题目补了case,最后算没过。几次比赛下来,发现第四题都会牵涉到一些高级算法或者组合多个问题,比如状压DP,树状DP,各种图论如Tarjan/BF,数论等, 打算学习一些高级算法技巧, 争取后面能稳定4题。

语言

之前刷题主要是用C#, 框架里面少了2个高级数据结构有点无语,PriorityQueue, MultiSet,PQ内部就是个堆,可以自己手动撸个, MultiSet 这个可以用 SortedList<TKey,TValue> ,加二分来实现floor和cell功能。由于没接触过这俩数据结构带来解题思路上的缺失,使我意识到要BFS,开拓一下视野。

最近参与6.824课程,使用了golang做课程,发现golang里面一些设计有点意思。还写了一些Java代码,了解了一些JVM的东西,通过对比CLR有一些收获,后面考虑写一篇相关的。