देखकर कि किसी को वास्तव में इस सवाल का एक गंभीर उत्तर पोस्ट करने के बाद, मैं नहीं बल्कि अपने ही धोखा यहाँ है, जो जवाब @SimonNickerson द्वारा वर्णित की एक विशेष मामला है दोहराने होंगे:
हे (1) नहीं है संभव है, जब तक आप, मूलांक 2 पर हैं क्योंकि इस तरह से, हर 0 अतिरिक्त किसी अन्य नंबर दोनों 1 और 0, है और इस प्रकार अपने "समाधान" केवल पूर्णांकों के लिए नहीं काम करता है ...
संपादित
कैसे 2^के -1 - 1? क्या यह सब 1 एस नहीं है?
ड्रैट! सच है ... मुझे पता होना चाहिए था कि जब कुछ इतना आसान लगता है, तो यह किसी भी तरह से त्रुटिपूर्ण है ... अगर मुझे सभी 0 मामले शामिल हैं, तो मुझे सभी 1 मामले भी शामिल करना चाहिए था।
सौभाग्य से इस मामले का परीक्षण बहुत जल्दी किया जा सकता है (यदि अतिरिक्त और बिटवाइज और ओ (1) ऑपरेशन माना जाता है): यदि एक्स परीक्षण करने की संख्या है, तो इस तरह की गणना करें: y=(x+1) AND x
। यदि y=0
, तो x=2^k - 1
। क्योंकि यह एकमात्र मामला है जब सभी बिट्स को अतिरिक्त रूप से फ़्लिप करने की आवश्यकता होती है। बेशक, यह थोड़ा सा दोषपूर्ण है, क्योंकि बस चौड़ाई से अधिक लंबाई के साथ, बिटवाई ऑपरेटर अब (1) नहीं हैं, बल्कि ओ (एन) हैं।
उसी समय, मुझे लगता है कि इसे बस चौड़ाई आकार के टुकड़ों में तोड़कर, और पड़ोसी लोगों को एक साथ जोड़कर ओ (लॉगएन) में लाया जा सकता है, केवल तब तक दोहराया जा सकता है जब तक कि केवल एक ही नहीं छोड़ा जाता है: यदि वहां परीक्षण किए गए नंबर में 0 0 नहीं थे, आखिरी वाला पूर्ण 1s भी होगा ...
EDIT2: मैं गलत था ...यह अभी भी ओ (एन) है।
आपको प्रत्येक अंक पर जाना होगा। निरंतर मतलब है कि आप एन = 1 की गणना करने के लिए एक ही समय का उपयोग करेंगे क्योंकि आप एन = 123456789 –
इनपुट पर धोखा दे रहे हैं (स्ट्रिंग को विभाजित करने के लिए आवश्यक समय मानते हुए और इसे सेट में बदल दिया जा सकता है) – BigMike
ओ (एन) क्या एन के लिए? एन की परिमाण? अंकों की संख्या (यानी लॉग)? – Kevin