我试图围绕我的编码解决方案节省时间。在JavaScript中将O(n^3)更改为O(n^2)
我有一个名为tripletSum
功能采用两个参数x
和a
其中x
是一个数字,a
是一个数组。
这个功能应该返回true
如果列表a
包含三个元素这加起来数目x
,否则就应该返回false
。
我创建了如下工作方案:
function tripletSum(x, a) {
for(var i = 0; i < a.length; i++) {
for(var j = i + 1; j < a.length; j++) {
for(var k = j + 1; k < a.length; k++) {
if((a[i] + a[j] + a[k]) === x) {
return true;
}
}
}
}
return false;
}
但这似乎不是最好的做法。如果我没有弄错,现在通过这个函数运行的时间是O(n^3)
,我认为它可以被改进为具有O(n^2)
的时间复杂度。
无论如何,我可以改变这个代码来做到这一点?
编辑:这不是另一个问题的重复,因为我要求在JavaScript中的当前示例的具体改进,这不是它在标记的重复问题中所要求的。
http://codereview.stackexchange.com可能会给你更好的答案 – Jamiec
从排序开始 - http://www.geeksforgeeks.org/find-a-triplet-that-sum-to-a-given-value/ –
https://en.wikipedia.org/wiki/3SUM – Bergi