面试总结-刷题心得

结论先行,刷题策略:《代码随想录》的回溯、贪心、动态规划、二分、双指针 +《算法图解》的动态规划 +《剑指offer》全书

1 问题

我从校招找工作开始就有个痛点,动态规划,贪心算法,或者没有刷到过的回溯,都不会。这些是我认为的hard程度的题,我也曾花了些时间看教程,但始终学不会。

对待面试时的coding,我一直的想法是如果出了上述我不会的hard题,那这家公司跟我本来就是无缘,错过了也不可惜。

我还给自己找了借口:毕竟我不是计算机专业出身的,coding做的好说明一个人真牛逼,但做不好不能说明他不牛逼。

后来在《看不见的大猩猩》,看到了一句特别应景的话:

人类的自信错觉:表现好是因为自己本身实力强,表现不好是运气差,或者是因为一时的粗心大意。总之,人们经常忽略能力这个最重要的因素。

解决方法只有一个,提高能力。

应用到coding上,就是做出来了是我牛逼,做不出来是我运气差,从来不觉得是自己能力问题。

我刷leetcode时遇到最大的问题是什么?

没有找到合适的教程,题太多了刷不过来,没有思路。

看题解吧,五花八门,不知道看哪个好;看懂一道题再写出来要1个小时,没时间;看懂了也是强行记住,下次遇到类似的问题还是不会。

所以有一个好的教程是最好的。

校招和两年前找工作时用的是《剑指offer》,出的题虽高频,但还是有很多看不懂的,并且也没有系统梳理。

后来看《程序员代码面试指南》,微信读书推荐值85.3%,我尝试看了看,不对胃口,这哪里是书,只是作者自己的刷题思路,一点也不系统。

今年在搜全排列问题时发现了代码随想录网站,发现这个教程是真的好。

2 收获

第一个是回溯法,真是令我恍然大悟,醍醐灌顶,来来回回看了4遍。

他的回溯法公式,图解,回溯就是暴力搜索理念,让我彻底克服了这个知识盲点。

组合,子集,全排列,切割等问题,都可以用他总结的模板,惊为天人。

第二个是二分查找算法的边界确定

作者提出了循环不变量这一概念,彻底解决了我多年的二分查找的终点记混问题。对我来说,始终记不清楚while循环条件到底是left<right还是left<=right,更显左右边界时到底是L=mid+1,还是l=mid。

**一句话,while循环里的边界要和更新左右边界时保持同样的区间表示。**如果while循环是左闭右开区间,那更新左右边界时也是左闭右开,如果while训练里是坐闭右闭,那更新时也是左闭右闭。

此理念同样适用于根据前序和中序遍历结果重建二叉树这道题,其实区间是左闭右开。剑指offer里关于此题没有解释为什么,我最初还是强行记忆,一头雾水。

第三个是动态规划0-1背包问题。

一开始看《代码随想录》讲的0-1背包并没有看懂,后来有人在评论说是看了《算法图解》看明白了,我就也去看了,果然看明白了。

然后又跟着《代码随想录》刷了一遍动态规划,至少懂一些。买卖股票的7个变种,0-1背包中只能取一次和取无限次的公式,总结得都很好。

3 教训

当我关注《代码随想录》公众号时,我发现有42个朋友关注。更讽刺的是,这本书2021年就有了。

2021年是我第一次跳槽,我当时还是拿着3年前校招时买的《剑指offer》在复习。我被固有的认知束缚住了。

如果那时我多问几个人,说不定就就会有人推荐《代码随想录》,那样的话我就提前两年掌握了我今天才掌握的知识。

这充分说明了交流的重要性,"读大量的书,和大量的人交流",这样才更有可能打破固有的思维。


最后,还有一个思维上的小技巧,刷题时,如果觉得这道题自己会了,纠结要不要做时,就花三分钟做一下。

如果你很熟悉,三分钟就写完了,不算浪费时间,权当又复习了一遍;如果你不会或者不熟悉,这次尝试就测出了你的知识漏洞。

其实面试时的coding跟高考一样,考的是熟不熟,而不是会不会。

最后的最后,我的认知肯定是有限的,如果有读者有更好的教程推荐,请一定评论分享一下,给你比一个大大的心。

越分享,越成功。

相关推荐
洛水水1 小时前
【力扣100题】30.二叉树的直径
算法·leetcode·职场和发展
REDcker1 小时前
C++变量存储与ELF段布局详解 从const全局到rodata与nm_readelf验证实践
java·c++·面试
折哥的程序人生 · 物流技术专研5 小时前
《Java 100 天进阶之路》第17篇:Java常用包装类与自动装箱拆箱深入
java·开发语言·后端·面试
凯瑟琳.奥古斯特5 小时前
假脱机技术原理详解
开发语言·职场和发展
洛水水5 小时前
【力扣100题】31.二叉树的层序遍历
算法·leetcode·职场和发展
洛水水6 小时前
【力扣100题】41.爬楼梯
算法·leetcode·职场和发展
每天回答3个问题7 小时前
leetcodeHot100 | 104.二叉树的最大深度
c++·面试·
Liangwei Lin8 小时前
LeetCode 287. 寻找重复数
算法·leetcode·职场和发展
Daorigin_com9 小时前
道本科技三大系统形成的“合同—合规—法务”智能闭环!
科技·职场和发展·分类·服务发现·边缘计算·集成学习·敏捷流程
likerhood9 小时前
ConcurrentHashMap底层数据结构和面试常见问题
java·数据结构·面试·hashmap