LeetCode-Python 270题刷题心得体会

本文首发于一亩三分地,放在博客上备个份。

个人背景:本科学校特别烂,只教过C语言,还是那种四个星期教Hello World, 八个星期教For循环的龟速授课模式。数据结构课基本不需要打码,考试就是考PPT上的概念默写题。像什么OS, 网络都是只教概念,背PPT就好了,不需要动手打码实现……来了地里才发现自己学校的授课是真滴烂……

后来大三了发现自己太菜了,真的基本一点都不会打码,跟个废物一样,就痛定思痛,去Codecademy.com上花了几天学完了Python的语法:可以免费学完,也可以充值20刀一个月多一点点练习。然后在Codewars.com上花了一两个月写了200题,只做比较简单的5KYU-8KYU的题,学Python基本的一些自带函数的用法,比如split, join等都是在这上面学的。这两百题刷完,我感觉自己Python的水平就可以拿来写LeetCode 题了。

再然后就到了申请季,来地里学习了一波刷题的重要性,深刻体会到了自己需要提高码力,于是淘宝买了网课视频。网课视频是每一次2-3小时,讲一个知识点和例题,比如讲链表的话,就会一起讲五六道经典例题。我一般开两倍速看,看完了就去LC上,先把讲过的例题都自己做一遍,然后在相同的分类下,按AC率排序,从容易的开始做。一开始没经验不会做,十分钟以内没想法的题就直接抄答案学思路,后面慢慢地见的套路多了,就学会了。

在LC上做完了题,都会写博客记录下自己的思路和代码,便于以后复习。

我觉得刷题最重要的有几点:
1. 坚持刷,就算一题都做不出来,对着答案抄,学习思路,也比不做好。没有人生下来就会打码,坚持下去一百题两百题,慢慢地量变就会引发从不会到会的质变。

2. 坚持输出,写博客记录自己的想法和实现。优点在于:首先可以理清自己的思路, 其次输出的过程强化记忆,再次还可以从访问量的不断增加上获取自我成就感,最后还可以帮助别人。

3. 不会就抄,不要浪费时间,超过十分钟没想法就直接看答案。我认为刷LC题和刷GRE 填空题一样,都是需要快速得到正反馈的事情。如果长久无法得到反馈,刷题人的情绪就容易变得糟糕。而且一些算法,比如Sliding Window, 没见过的人很难自己想出来,这个时候就需要从答案里学习。
同样的,最近的周赛题1014,用的是二分查找或者叫二分试探法,核心思想就是根据题目的条件先猜出来结果可能落在的区间【left,Right】,然后模拟题目过程,用二分法猜答案并逐步缩小范围。没有见过的同学真的很难自己去想怎么做,但是如果抄答案学了第一次,那么再遇到相似的题,比如875 410,就会简单不少。 PS:这种题型好像是最近的狗家高频题

4. 学会举一反三,2019年了,LC上现在已有1000题,外表不同但核心思想重复的题有不少,因此我认为举一反三的能力相当重要 。
比如上面说的410 875 1014就是一类题。
还有上个月周赛1008.根据先序遍历构造BST,当时我是这么想的:BST的中序遍历是升序,所以对先序遍历排个序就可以得到中序遍历,然后这道题就变成了105. 从前序与中序遍历序列构造二叉树。 
以及763.划分字母区间,我觉得只需要统计每个字母第一次出现的下标(find函数),和最后一次出现的下标的(rfind函数),就可以得到每个字母的区间范围,然后题目就会转化为56. 合并区间。
举一反三可能不一定能类推得到最优解,但是确实有助于在短时间内想出可行解,并且帮助你多复习经典题型。

最后还是来两句鸡汤吧,坚持,努力,认真刷题,FLAG在向大家招手!

题解集合: 题解集合 Python

你可能感兴趣的:(其他)