नोट, कृपया इस उत्तर के नीचे पढ़ें कि यह समस्या वास्तव में क्यों संभव है। मैंने सवाल गलत पढ़ा।
सामान्य मामले में यह संभव नहीं है। सूची पर विचार करें:
एन, एन -1, एन-2 ... 4, 3, 2, 1
जोड़े
हो जाएगा:
(एन, n-1), (एन , एन -2) ... (एन, 2), (एन, 1), (एन -1, एन -2), (एन -1, एन -3) ... ... (3, 2) (3, 1), (2, 1)
इसलिए O (n^2) जोड़े होते हैं और इसलिए सूची हे में निर्माण (एन एन लॉग इन करें)
हालांकि नहीं किया जा सकता है, तो आप क्या कर सकते हैं यह सूची के एक पास के साथ:
- सूची के अंत में शुरू होता है और कार्य बैकवर्ड करता है।
- जबकि सूची के माध्यम से आगे बढ़ जो नंबर आप को देखा है का एक ढेर को बनाए रखने के (इस पाश हे होने का कारण बन (एन एन लॉग इन करें) होगा)
हमेशा के लिए
- आप सभी नंबरों को खोजने के लिए ढेर में कोई खोज करने का सामना नंबर जो वर्तमान में आप जिस नंबर पर हैं उससे कम हैं। एक जोड़ी के रूप में वर्तमान संख्या और ढेर में संख्या आउटपुट। (यह हे है (एन एन लॉग इन करें) ढेर में पहला मैच खोजने के लिए है, लेकिन हे (एन) सभी छोटी संख्याओं को खोजने के लिए किया जाएगा)
अपने उदाहरण के लिए:
सूची: 3 4 1 6 7 3
दूसरे मद से शुरू
ढेर (3) आइटम (7)
आउटपुट (7, 3)
012,351,
ढेर (3, 7) आइटम (6)
खोज और पाते हैं 7, उत्पादन (6, 3)
ढेर (3, 6, 7) आइटम (1)
खोज और कुछ भी नहीं
ढेर लगता है (1, 3, 6, 7) आइटम (4)
खोज और पाते हैं 3 और 1 निर्गम (4, 3) (4, 1)
012,
आदि ....
संपादित करें, यह संभव है वास्तव में
के बाद से JoshD सही ढंग से कहा गया है कि हम तत्वों की संख्या के लिए देख रहे हैं, तो आप एक बी पेड़ एक ढेर के बजाय का उपयोग कर सकते हैं और फिर आप बस की गिनती प्राप्त कर सकते हैं मौजूदा आइटम से कम तत्व और इसे काउंटर में जोड़ें।
आपने उन्हें क्या बताया? उन्होने तुम्हे क्या कहा? – tster
मैंने ओ (एन^2) 2 लूप के साथ सोलन दिया। उन्होंने कहा कि एक ओ (nlogn) एक – Nemo
है http://stackoverflow.com/questions/337664/counting-Inversions-in-an-array? – Rsh