算法题没有思路,遇到一个没见过的就不会写
回复 群友 4457: 你现在更需要练的不是“认出这题套什么模板”,而是“没有模板时,怎么迈出第一步”。先允许自己写出笨办法。 比如一道没见过的题:找出数组里连续几个数相加的最大值。 拿 [2 -3 4 -1 2] 手算,你会发现 [4 -1 2] 的和是 5。 没思路时,按下面这个过程走: 先问:怎样保证找到答案? 把所有连续片段都枚举出来,每段求和,取最大的。慢没关系,这已经是一个正确方向。 再问:哪里在重复计算? 算过 [2 -3] 的和,再算 [2 -3 4],不用从头相加,只要在原来的和上加 4。 最后问:哪些计算可以直接放弃? 如果前面一段的和是负数,把它接到后面只会拖后腿。不如从当前这个数重新开始。 这样才逐渐得到优化思路,而不是凭空想到某个算法名字。 你接下来练题,可以要求自己在写 JS 前先写三句话: 输入、输出分别是什么? 如果不考虑速度,我会怎么找答案? 拿一个小例子,我的方法能不能一步步执行? 如果第二句都写不出来,就先用纸笔手算,记录自己做了哪些判断。代码是把步骤翻译出来,不是拿到题就直接敲。 看题解也一样:不要只记最终代码,要补上“暴力办法是什么、为什么可以优化”这条推导链。 你发一道最近卡住的题,我们就从你的第一步开始推,我先不给完整答案。