मान लें कि सरणी में 1 और 1,000,000 के बीच पूर्णांक है।पूर्णांक वाले सरणी में एक मान सरणी में दो बार होता है। आप कैसे निर्धारित करते हैं?
मैं इस समस्या को हल करने के कुछ लोकप्रिय तरीके जानते हैं:
- 1 और 1,000,000 के बीच सभी नंबरों को शामिल कर रहे हैं, सरणी तत्व की राशि मिल जाती है और कुल योग से घटा दें (n * n + 1/2)
- एक हैश नक्शा (अतिरिक्त स्मृति की जरूरत है)
- थोड़ा मैप का उपयोग करें (कम स्मृति भूमि के ऊपर)
मैं हाल ही में एक और समाधान में आए प्रयोग करें और मैं पीछे तर्क को समझने में कुछ मदद की ज़रूरत है यह:
एक एकल रेडिक्स संचयक रखें। आप अनन्य-या के साथ संचयक उस इंडेक्स पर इंडेक्स और मान दोनों।
तथ्य यह है कि x^सी^x == सी उपयोगी है, क्योंकि प्रत्येक नंबर दो बार xor'd होगा, जो दो बार वहां मौजूद है, जो 3 बार दिखाई देगा। (x^x^x == x) और अंतिम अनुक्रमणिका, जो एक बार दिखाई देगी। तो यदि हम अंतिम सूचकांक के साथ संचयक बीज करते हैं, तो संचयक का अंतिम मान सूची में दो बार होगा।
अगर कोई मुझे इस दृष्टिकोण के पीछे तर्क को समझने में मदद कर सकता है तो मुझे इसकी सराहना होगी (एक छोटे से उदाहरण के साथ!)।
एक विश्लेषण बिंदु से, क्या रेडिक्स संचयक विधि अंतरिक्ष या समय के मामले में अधिक कुशल है? मैं समझता हूं कि अंतरिक्ष आवश्यकता ओ (1) है, और समय जटिलता ओ (एन) है। लेकिन, मुझे लगता है कि सरणी विधि के योग में एक ही जटिलता है। सही ? – brainydexter
कहीं भी सवाल नहीं कहता है कि पूर्णांक संगत हैं या यदि सरणी में सीमा में सभी संख्याएं हैं। रेडिक्स समाधान ऐसा प्रतीत नहीं होता है कि यह {100, 15, 15, 3, 1000000} के लिए काम करेगा, हालांकि प्रश्न का आपका संक्षिप्त वर्णन उस सरणी को बाहर नहीं करता है। – Ross