【发布时间】:2017-05-09 01:24:07
【问题描述】:
我目前通过在 Codewars.com 上做练习来研究我的 JavaScript。 我一直做得很好,但我遇到了这个问题,我无法找到优化它的方法。 问题来了:
对的总和
给定一个整数列表和一个总和值,按照出现的顺序返回前两个值(请从左边解析),加起来形成总和。
sum_pairs([0, 0, -2, 3], 2)
# there are no pairs of values that can be added to produce 2.
== None/nil/undefined (Based on the language)
sum_pairs([10, 5, 2, 3, 7, 5], 10)
# ^-----------^ 5 + 5 = 10, indices: 1, 5
# ^--^ 3 + 7 = 10, indices: 3, 4 *
# * entire pair is earlier, and therefore is the correct answer
== [3, 7]
注意: 还将测试长度超过 10,000,000 个元素的列表。确保您的代码不会超时。
这很简单,我的解决方案有效,但在 10,000,000 个元素测试的 12 秒后超时。
我的解决方案:
function sum_pairs(numArray, num){
var nums = numArray;
var sum = num;
var resultsArray = [];
var result;
for(var i = 0; i < nums.length; i++){
for(var j = i+1; j < nums.length; j++){
if(nums[i] + nums[j] == sum){
resultsArray.push({resArray: [nums[i],nums[j]], weight: j});
}
}
}
if(resultsArray.length != 0){
var result = resultsArray.pop();
for(var i = 0; i < resultsArray.length; i++){
if(result.weight > resultsArray[i].weight){
result = resultsArray[i];
}
}
result = result.resArray;
}
return result;
}
问题:
如何优化此代码使其不会超时。 我只是一个编程方面的初学者,我不确定我的解决方案的哪一部分会导致速度变慢。 我现在要阅读 Big O 表示法,还有其他学习代码优化的资源吗?
【问题讨论】:
-
好问题,但这可能更适合codereview.stackexchange.com
-
我会这样做的,谢谢您的意见。
标签: javascript performance optimization