Próbuję zawinąć głowę oszczędzając czas w moim rozwiązaniu kodowania.Zmiana O (n^3) na O (n^2) w JavaScript
Mam funkcję zwaną tripletSum
który ma dwa parametry x
i a
gdzie x
jest liczbą i a
jest tablicą.
Funkcja ta ma powrócić true
jeśli lista a
zawiera trzy elementy, które sumują się do liczby x
, w przeciwnym razie należy zwrócić false
.
Utworzyłem następujące Roztwór roboczy:
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;
}
Ale to nie wydaje się najlepszą praktyką. Obecnie czas potrzebny na uruchomienie tej funkcji to O(n^3)
, jeśli się nie mylę i myślę, że można ją poprawić, aby mieć złożoność czasową O(n^2)
.
W każdym razie mogę zmienić ten kod, aby to zrobić?
Edit: To nie jest duplikat innej kwestii, bo prosił o konkretnej poprawy na moim obecnym przykład w JavaScript, który nie jest co poprosił w oznaczonym duplikatu pytanie.
http://codereview.stackexchange.com może dać ci lepszą odpowiedź – Jamiec
Zacznij od sortowania - http://www.geeksforgeeks.org/find-a-triplet-that-sum-to-a-given-value/ –
https://en.wikipedia.org/wiki/3SUM – Bergi