- 语言不是最重要的,思想最重要
- 从做上面的题,我发现我更擅长一些数学技巧不高的程序题,习惯靠直觉立马书写代码,而非严格推理之后,再书写代码
- 对于链表的题比较擅长,链表可以在纸上画画,关键要考虑的问题,就是链表指针在运算中会改变,如何保存需要保存的链表指针值是难点,除了那题拷贝具有random指针的链表题,其他链表题我都比较快速的AC掉
- 对于树的题,常见的方法有:BFS和递归(可以看作是DFS),整体来说,难度也不大,其中递归应该是最常用的,递归的方法需要注意的就是边界判定;当然另一个问题,就是很多情况下,会被要求写非递归的解法,比如说树的遍历,或者知先序中序构建树,这些问题我得好好研究
- 对于求解题的BFS和DFS得到了比较大的锻炼,之前一直感觉模糊的掌握了DFS和BFS这两种搜索方法,事实上,直到现在才算是掌握的比较不错,对于leetcode上面的很多题,如果不限时的话,我都能以DFS搞定(起码能有20题以上),BFS往往在求解最先到达或者最短时间的时候用到,用起来感觉还不错
- 对于DP还是不算很熟悉,除了LCS,LIS还有编辑距离这样的经典DP题,其他我都很少往DP想,为什么我总觉得DP有点难理解呢?
- 关于DP和BFS,DFS求解的选择问题:一般来说,需要记录解(由哪些组成)优先选择BFS和DFS,它们在运算的时候能够很好的保存中间结果;对于DP,适合求解最终结果是怎么的情况,比如求值(最长公共子序列),或者判断是否存在(bool),DP如果要输出最优路径的话,是个比较麻烦的问题,一般还需要设置一个观测DP在选择表中如何移动的数组,关于DP我要好好训练下。
- 对STL熟悉了很多,用过很多之前都没用过的容器,几乎都用遍了吧:set,map,hash_set(unordered_set),hash_map(unordered_map),multimap,multiset(?好像这个我没用过),vector,string,pair,stack,queue等等,以及algorithm的函数,比如sort, unique,这些STL提供的,真是极大的方便了生活,以前经常得自己写一些基本数据结构,然而,自己写的再好哪有STL的好用啊!
- 对于在电脑面前写一些简单的算法程序应该是没很大问题了,但接下来的问题是:1,手写我要跪,虽然现在用vim,但我思路经常很跳,经常想起来就在前面插入,纸上可没这条件;2,一些基本的算法还不够熟练,比如快排,堆排,归并,KMP,等等,要立马写出一个bug free并且efficient&&elegant的代码是件不容易的时,我以后得专门在github上面建一个repo好好练习,自己写给自己看
- leetcode上的大部分题都有不止一种解法,得好好看看其他人的解法,并且总结总结自己的解法 数据结构和算法是计算机技术的基础,有时候可以体会到美感。每一个 coder 都应该加强这方面的知识。
- 不要在乎题目本身,而是每个题目代表一定的背景知识,比如 dfs,剪枝,贪心和动态规划。
- 竞技和工程化写代码毕竟还是不一样的,思维方式不一样,最开始做题很困难是正常的。
- 实在想不出来可以看看提示,因为如果缺乏理论知识,怎么想也是想不出来的。
leetcode刷题经验
最新推荐文章于 2024-10-11 11:20:04 发布