algorithm - Find the pair of numbers in an unsorted array with a sum closest to an arbitrary target -
इस सवाल का पहले से ही एक उत्तर है: < / P>
- 10 उत्तर
यह एक सामान्यीकरण है 2Sum समस्या
संख्याओं की एक रिक्त सारणी को देखते हुए, आप संख्याओं की जोड़ी एक मनमाना लक्ष्य के निकटतम राशि के साथ कैसे पाते हैं। ध्यान दें कि एक सटीक मिलान मौजूद नहीं है, इसलिए O (n)
हैशटेबल समाधान यहां फिट नहीं है।
मैं इस समस्या को O (n * लॉग (एन))
0 के लक्ष्य के लिए समय इतनी के रूप में:
-
पूर्ण मान द्वारा संख्या क्रमबद्ध करें।
- < P> सटे हुए एरे के पार, दोहराए गए मूल्यों की न्यूनतम राशि रखने के लिए।
यह काम करता है क्योंकि जोड़े के तीन मामलों (+ / +, +/-, - / -) सभी को पूर्ण मूल्य के तर्क द्वारा नियंत्रित किया जाता है। अर्थात्, उसी चिह्न के जोड़े की संख्या कम से कम होती है, जब वे 0 के सबसे करीब होते हैं, और जोड़ी के घटकों को एक-दूसरे के सबसे करीब होने पर अलग-अलग संकेतों की जोड़ी कम करनी पड़ती है
मैं यह कैसे एक मनमाना लक्ष्य राशि के लिए सामान्य कर सकता हूँ?
चरण 1: सरणी को बिना कम क्रम में क्रमबद्ध करें जटिलता: ओ (एन एलजी एन)
चरण 2: दोनों ओर से अंत में स्कैन करें जटिलता: ओ (एन)
सॉर्ट किए गए ऑरेंज पर यदि कभी अन्यथा, साइन इन के परिवर्तन ए ,
l
बाएं-सबसे (यानी न्यूनतम) तत्व और को इंगित करें <पूर्व>
सही कहां है: cursum = a [l] + a [r] diff = currSum - लक्ष्य अगर (diff & gt) ; 0): r = r - 1 और: l = l + 1
diff == 0
है, तो आपको 2 स्यूम के लिए एक परिपूर्ण मैच मिला है। diff
के लिए देखें, यानी सकारात्मक से नकारात्मक, या नकारात्मक से सकारात्मक तक का स्थानांतरण जब भी संक्रमण होता है, या तो परिवर्तन के ठीक पहले या बस के बाद, currSum
लक्ष्य
के सबसे निकट है। कुल जटिलता: हे (एन लॉग एन) चरण 1 के कारण।
Comments
Post a Comment