【发布时间】:2017-06-05 22:29:25
【问题描述】:
我正在尝试解决有关 CodeWars 的问题,该问题是 Google CodeJam 2016 资格赛的一部分。 https://www.codewars.com/kata/bleatrix-trotter-the-counting-sheep/train/javascript
我相信我的代码占了所有测试用例,我唯一的问题是它无法在 codewars 上提交,因为它的运行时间大于 12000 毫秒。
如何让我的代码更有效率?还有测试循环是否无限的最佳实践。
function trotter(n) {
var tracker = [];
var sum = [];
var snacker = n;
for(var i = 0; tracker.length < 10; i++){
sum = snacker.toString().split('');
sum.forEach(function(num) {
if (tracker.indexOf(num) == -1) {
tracker.push(num);
}
});
snacker += n;
}
return tracker.length === 10 ? snacker - n : "INSOMNIA";
}
【问题讨论】:
-
for 循环可以比 forEach 快,而 if..else 通常比复合运算符 @ 快987654323@,存储
tracker.length的值比每次获取都快。但当然编译器优化意味着这并不总是正确的。 -
我会做你刚才提到的调整,看看是否有效,谢谢
-
我尝试使用 map 和 reduce 尽可能提高效率,但我无法获得相同的返回值;
-
如果 n == 2,您不会在 10 次或更少的迭代中得到“3”。
-
我发布到 codwars 的链接中的说明指定 n 只能通过乘以 1 的增量来增加。
标签: javascript performance runtime infinite-loop