हाल के एक साक्षात्कार में मुझे नीचे दिए गए कार्यक्रम को लिखने के लिए कहा गया था। उस वर्ण का पता लगाएं जिसकी आवृत्ति दी गई स्ट्रिंग में न्यूनतम है? तो मैंने charAt का उपयोग करके स्ट्रिंग के माध्यम से पुनरावृत्ति करके और चरित्र को हैश मैप में कुंजी के रूप में संग्रहीत करने और अवसरों की संख्या के रूप में इसकी कीमत के रूप में संग्रहित करने की कोशिश की। अब मुझे सबसे कम तत्व खोजने के लिए मानचित्र पर फिर से शुरू करना होगा।जावा में एक स्ट्रिंग में किसी चरित्र की फ़्रिक्वेंसी खोजने का कुशल तरीका: ओ (एन)
क्या ऐसा करने का एक और अधिक प्रभावी तरीका है क्योंकि स्पष्ट रूप से ऊपर वाला एक अनुमान है कि मुझे लगता है।
अद्यतन और एक अन्य समाधान
कुछ विचार प्रक्रिया और जवाब के बाद मुझे लगता है कि सबसे अच्छा समय है कि हो सकता है हे (एन) है। पहले पुनरावृत्ति में हमें चरित्र द्वारा स्ट्रिंग चरित्र के माध्यम से पुनरावृत्ति करना होगा और फिर अपनी आवृत्ति को विशिष्ट स्थिति (एक चरित्र एक int) पर एक ऐरे में संग्रहीत करना होगा और उसी समय दो अस्थायी चर होते हैं जो कम से कम गिनती और संबंधित चरित्र बनाए रखते हैं इसलिए जब मैं अगले चरित्र पर जाता हूं और इसकी आवृत्ति को एआर [char] = arr [char] +1 में संग्रहीत करता हूं, उसी समय मैं जांच करूंगा कि अस्थायी चर के पास इस मान से अधिक मूल्य है, यदि हां तो अस्थायी विविधता यह मूल्य होगी और यह भी एक होगा। इस तरह से मुझे लगता है कि हमें सबसे छोटा खोजने के लिए दूसरी पुनरावृत्ति की आवश्यकता नहीं है और कोई सॉर्टिंग आवश्यक नहीं है मुझे लगता है कि
.... वाट कहें? या कोई और समाधान
आपका चलने का समय ओ (2 एन) = ओ (एन) है। सबसे अच्छा आप कर सकते हैं ओ (एन) है। शायद आप दूसरे पुनरावृत्ति से छुटकारा पा सकते हैं लेकिन यह है। – Kevin
दूसरा पुनरावृत्ति निरंतर है। एल्गोरिदम ठीक है लेकिन मैं हैश मैप के बजाय एक सरणी का उपयोग करने का सुझाव देना चाहता हूं और यह अधिक कुशल होना चाहिए। – DHall
@ केविन .. हाँ .. अगर इसका एक क्रमबद्ध नक्शा दूसरा पुनरावृत्ति ओ (1) हो सकता है तो कम से कम या उच्चतम मौका चरित्र ... – crackerplace