面试总结-刷题心得

结论先行,刷题策略:《代码随想录》的回溯、贪心、动态规划、二分、双指针 +《算法图解》的动态规划 +《剑指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跟高考一样,考的是熟不熟,而不是会不会。

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

越分享,越成功。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值