关于一题多解的情况如何应对呢
来源:3-4 更多栈和队列的问题推荐
LanceMai
2020-09-04 23:58:41
波波老师,我把这些题目做完了。但是我有一些问题:您说过学习不能完美主义,我也很认同。但是在LeetCode上的每一道题都不只是一种答案,当我想到一个比较合适方法的时候,发现别人题解中有更好的方法,这样的话我是不是要去学习人家的方法?题目很多,如果每道题都这么做的话,感觉会浪费很多时间,这也跟您说的学习方法有冲突。
因此,我该如何去应对一个题目有多个题解的情况呢?要把每一个解题方法都掌握么?
谢谢!
1回答
我个人并不建议把一个问题的“所有解”都掌握,因为怎么定义一个问题的“所有解”是一个很困难的事情。有些解是一个思路上巨大的变化,仔细学习收获会很大;而有些解很有可能本质只是实现上的一个 trick 而已,在上面花费过多的精力不值得。
原则上,我的建议是,对于和你自己的解的复杂度都不在一个级别上的解决方案,应该学习一下。比如一个问题,你使用 O(n^2) 的算法解决了,但是发现其实这个问题还有 O(nlogn) 甚至 O(n) 的解决方案,应该学习一下。除非一眼看上去,这个复杂度更优的解决方案“超纲了”。比如 Leetcode 5 号问题的 Manacher 算法,确实不需要掌握。
但是我可以理解对于很多同学来说,如何把握一个解到底是不是一个更优复杂度的解。所以我给出的建议是:对于一个问题,如果你做完以后,发现他有多个思路,只再去踏踏实实学习一个新的思路就好了。这样,对这种问题,你能多学习一个思路,暂时就够了。每个问题能多学习一个思路,积累起来也不得了。同时慢慢的,也能打开自己的思维方式。
当然,如果你发现一个问题还有第三个解法,你也很感兴趣,那就看一看。这里的关键是,不要追求“所有解”。“所有”是一种完美主义,一旦开始追求“所有”,你的关注点很有可能就从学习算法本身,转移到了别的“形式主义”的东西上。
继续加油!:)
相似问题