这两天在codewars上面刷题,遇到了这个题,题目意思是让你完成一个函数,这个函数有三个参数,分别是 g,m,n。你需要做的是找到 [m,n] 之间的所有素数,并且相邻的两个素数之差要等于 g,如果有满足条件的组合,则返回;否则,返回null。
这个题目乍一看上去没什么毛病,直接上代码:
所有的基础测试用例都通过了,random test 也通过了,可是就毁在效率上了。(心累)
自己想了想,没有什么优化思路,还是上网去查查资料吧。结果发现一个大神给出的优化思路:
- Don’t use array to store prime numbers. You only need one previous prime to remember. And even if you ever do this, don’t remove elements from its middle, as shifting array contents is very costly.(第一个建议第一句话就是不要使用数组来存储素数,多么痛的领悟。最后又提到:转化数组的内容是恨消耗性能的。)
- Store number from expensive
Math.sqrt()
, don’t re-calculate it every iteration. Basically, this is rule for every loop - precalculate limits if possible.(使用 Math.sqrt() 这个函数,不要每次迭代的时候重新计算) - …
看看大神给出的高效率的解法:
这个解题思路需要好好的消化下!
附:传送门