मैं अपने कोडिंग समाधान में समय बचाने के लिए अपने सिर को लपेटने की कोशिश कर रहा हूं।जावास्क्रिप्ट में ओ (एन^3) से ओ (एन^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)
की समय जटिलता के लिए इसे बेहतर किया जा सकता है।
वैसे भी मैं यह कोड ऐसा करने के लिए बदल सकता हूं?
संपादित करें: यह अन्य प्रश्न का डुप्लिकेट नहीं है क्योंकि मैं जावास्क्रिप्ट में अपने वर्तमान उदाहरण पर एक विशिष्ट सुधार की मांग कर रहा था, जो कि चिह्नित डुप्लिकेट प्रश्न में नहीं पूछा गया था।
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