मुझे लगता है कि यह संभव है। रहस्य यह है कि आपको वास्तव में सूची को क्रमबद्ध नहीं करना है, आपको बस एक संख्या बनाने की जरूरत है कि कौन से नंबर मौजूद हैं। यह एक एल्गोरिदमिक परिप्रेक्ष्य से "धारणा बनाने" के रूप में गिना जा सकता है, लेकिन व्यावहारिक परिप्रेक्ष्य से नहीं। हम जानते हैं कि इनट्स एक मिनट और अधिकतम से बंधे होते हैं।
तो, समावेशी INT_MAX करने के लिए 2 बिट तत्वों, की एक सरणी 1 प्रत्येक के लिए जोड़ी INT_MIN से int बनाने के लिए, संख्या की पूरी सूची के माध्यम से 00
पुनरावृत्ति करने के लिए उन सभी को निर्धारित किया है। सूची में प्रत्येक नंबर के लिए, यदि संबंधित 2 बिट्स 00 हैं तो उन्हें 01 पर सेट करें। यदि वे 01 हैं तो उन्हें 10 पर सेट करें। अन्यथा अनदेखा करें। यह स्पष्ट रूप से ओ (एन) है।
अगला, यदि 2 बिट्स में से कोई भी 10 पर सेट है, तो यह आपका उत्तर है। न्यूनतम दूरी 0 है क्योंकि सूची में दोहराया गया नंबर है। यदि नहीं, तो सूची के माध्यम से स्कैन करें और न्यूनतम दूरी खोजें। बहुत से लोगों ने पहले ही बताया है कि इसके लिए सरल ओ (एन) एल्गोरिदम हैं।
तो ओ (एन) + ओ (एन) = ओ (एन)।
संपादित करें: टिप्पणियों का जवाब दें।
दिलचस्प अंक। मुझे लगता है कि आप सूची के न्यूनतम/अधिकतम को ढूंढकर और डेटा को पकड़ने के लिए न्यूनतम से अधिकतम तक की एक स्पैस सरणी का उपयोग करके किसी भी धारणा के बिना एक ही परिणाम प्राप्त कर सकते हैं। INT_MIN/MAX धारणा, अंतरिक्ष जटिलता और सरणी स्कैनिंग की ओ (एम) समय जटिलता का ख्याल रखता है।
क्या आप अपना रास्ता धोखा दे सकते हैं और उसी दो पूर्णांक की खोज कर सकते हैं, क्योंकि उनका अंतर न्यूनतम होगा? –
@aforloney - मुझे लगता है कि "सरणी में संख्याओं पर कोई धारणा किए बिना" आवश्यकता उस पर शासन करेगी। –
@aflorloney: न्यूनतम की आपकी परिभाषा पर निर्भर करता है। (10 - 10)> (2 - 3)। – Juliet