我試圖圍繞我的編碼解決方案節省時間。在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