सचिव समस्या इस प्रकार के रूप में वर्णित एक प्रसिद्ध समस्या है:
- आपको एक नए सचिव की आवश्यकता है
- आपके पास एन आवेदक हैं जो आप एक समय में एक साक्षात्कार कर सकते हैं
- आप साक्षात्कार के बाद प्रत्येक आवेदक को स्कोर करने में सक्षम हैं। आपका स्कोरिंग सिस्टम दो आवेदकों को एक ही स्कोर कभी नहीं देगा
- एक आवेदक का साक्षात्कार करने के बाद, आपको तत्काल "हाँ" या "नहीं" देना होगा
- आप उच्चतम स्कोर के साथ आवेदक चाहते हैं
समाधान पहले floor(N/e)
आवेदकों का साक्षात्कार करना है , और फिर पहले आवेदक को स्वीकार करना है जिसमें पिछले सभी आवेदकों की तुलना में अधिक अंक हैं। यदि कोई भी आवेदक अधिक नहीं है, तो अंतिम आवेदक को वापस करें। दिलचस्प रूप से पर्याप्त है, यह शीर्ष आवेदक 1/e
को समय देता है। यूलर की संख्याe
को संदर्भित करता है । का मान प्राप्त करने के लिए , आप बिलिन का उपयोग कर सकते हैं , या इसे कम से कम 5 दशमलव बिंदुओं पर हार्डकोड कर सकते हैं ।e
log
इनपुट:
अद्वितीय गैर-नकारात्मक पूर्णांक का एक गैर-खाली सरणी से अधिक नहीं 2^31-1
।
आउटपुट:
चुने हुए उम्मीदवार का प्रतिनिधित्व करने वाला पूर्णांक। स्पष्ट होने के लिए एल्गोरिथ्म है:
floor(N/e)
सरणी के पहले तत्वों में अधिकतम तत्व का पता लगाएं ।- शेष तत्वों के माध्यम से Iterate करें, और पहला तत्व जो चरण 1 पर पाए जाने वाले अधिकतम से अधिक है, वापस करें।
- यदि कोई भी तत्व उच्च नहीं है, तो अंतिम तत्व वापस करने से।
उदाहरण के लिए, मान लें कि आपकी सरणी थी [2,7,4,3,9,20]
, इसलिए N = 6
और floor(N/e) = 2
। सरणी के पहले 2 तत्व हैं [2,7]
। का कमाल [2,7]
है 7
। शेष तत्व हैं [4,3,9,20]
। पहला तत्व जो अधिक से अधिक 7
है 9
, इसलिए हम लौटते हैं 9
।
परीक्षण के मामलों:
[0] => 0
[100] => 100
[100, 45] => 100
[0, 1] => 0
[45, 100] => 45
[1, 4, 5] => 4
[1, 5, 4] => 5
[5, 4, 1] => 1
[5, 1, 4] => 4
[4, 1, 5] => 5
[56, 7, 37, 73, 90, 59, 65, 61, 29, 16, 47, 77, 60, 8, 1, 76, 36, 68, 34, 17, 23, 26, 12, 82, 52, 88, 45, 89, 94, 81, 3, 24, 43, 55, 38, 33, 15, 92, 79, 87, 14, 75, 41, 98, 31, 58, 53, 72, 39, 30, 2, 0, 49, 99, 28, 50, 80, 91, 83, 27, 64, 71, 93, 95, 11, 21, 6, 66, 51, 85, 48, 62, 22, 74, 69, 63, 86, 57, 97, 32, 84, 4, 18, 46, 20, 42, 25, 35, 9, 10, 19, 40, 54, 67, 70, 5, 44, 13, 78, 96]
=> 98
[10, 68, 52, 48, 81, 39, 85, 54, 3, 21, 31, 59, 28, 64, 42, 90, 79, 12, 63, 41, 58, 57, 13, 43, 74, 76, 94, 51, 99, 67, 49, 14, 6, 96, 18, 17, 32, 73, 56, 7, 16, 60, 61, 26, 86, 72, 20, 62, 4, 83, 15, 55, 70, 29, 23, 35, 77, 98, 92, 22, 38, 5, 50, 82, 1, 84, 93, 97, 65, 37, 45, 71, 25, 11, 19, 75, 78, 44, 46, 2, 53, 36, 0, 47, 88, 24, 80, 66, 87, 40, 69, 27, 9, 8, 91, 89, 34, 33, 95, 30]
=> 30
आपका समाधान होना चाहिए O(n)
, जहां n
सरणी की लंबाई है। यदि आपकी भाषा में एक बिलियन है जो एक सरणी की अधिकतम पाता है, तो आप मान सकते हैं कि फ़ंक्शन लेता है O(n)
(और उम्मीद है कि यह करता है)।
मानक कमियां लागू होती हैं, और यह एक कोड-गोल्फ है , इसलिए अपनी पसंदीदा भाषा में सबसे कम उत्तर दें!
e
(जैसे पायथन, जहां e=2.71828
की तुलना में कम है import math;math.E
) का उपयोग करना है
e
इस्तेमाल किया जाना चाहिए?