मैं इस सवाल का एक स्टार्टअप के लिए साक्षात्कार, जबकि कहा गया था औरलाभ को अधिकतम करना उद्धरण
** सवाल पर हाल ही में प्रतियोगिता में फिर से देखा:
आप दिए गए हैं दिनों के एक सेट के लिए स्टॉक की कीमतें। प्रत्येक दिन, आप या तो स्टॉक की एक इकाई खरीद सकते हैं, किसी भी स्टॉक यूनिट को बेच सकते हैं जिसे आपने पहले से खरीदा है, या कुछ भी नहीं। क्या अधिकतम लाभ आप अपने ट्रेडिंग रणनीति बेहतर योजना बना द्वारा प्राप्त कर सकते हैं? **
उदाहरण (इनपुट यानी दिन का कोई भिन्न हो सकते हैं)
5 3 2 => लाभ = 0 // के बाद से मूल्य प्रत्येक दिन कम हो जाती है, अधिकतम लाभ हम = 0
1 2 100 => लाभ = 197
1 3 1 2 => लाभ = 3 // हम 3 में 1 बेचने पर खरीद, तो हम खरीदने के लिए कर सकते हैं 1 पर और 2 पर बेचते हैं .. कुल लाभ = 3
मेरा समाधान:
ए) उस दिन को खोजें जब स्टॉक मूल्य सबसे बड़ा था। उस दिन तक स्टॉक की 1 इकाई खरीदते रहें।
ख) यदि उस दिन है अंतिम दिन तो छोड़ दिया:
बाकी: उस दिन सभी स्टॉक बेचें और उस दिन के बाद सरणी विभाजित है और शेष तत्वों पर recurse
ग) लाभ विलय
उदाहरण 1 4 1 2 3
ए) दिन 2 पर उच्चतम स्टॉक मूल्य .. इसलिए हम दिन 1 पर स्टॉक खरीदते हैं और इसे दिन 2 (लाभ = 3) पर बेचते हैं तो हम शेष दिनों पर पुन: कार्य करते हैं: 1 2 3
बी) अधिकतम मूल्य 3 है (दिन में 5) तो हम दिन 3 और 4 दिन पर शेयर खरीदने और 5 दिन पर बेचने रखना (लाभ = (3 * 2 - 3 = 3)
ग) कुल लाभ = 3 + 3 = 6
जटिलता इसके लिए ओ (एन^2) हो जाता है। इस समाधान ने 11 मामलों में से 10 को पारित किया लेकिन अंतिम परीक्षण मामले (यानी सबसे बड़ा इनपुट) पर समय सीमा पार हो गई।
तो मेरा सवाल यह है कि क्या कोई इस समस्या के लिए एक अधिक कुशल समाधान के बारे में सोच सकता है? क्या कोई गतिशील प्रोग्रामिंग समाधान है?
पीएस: यह पहली बार है कि मैं यहां एक प्रश्न पूछ रहा हूं। इसलिए कृपया मुझे बताएं कि मुझे इस प्रश्न में चीजों को सुधारने/जोड़ने की आवश्यकता है
अपने उदाहरण "1 3 1 2 4" में परिणाम 9 होना चाहिए नहीं 7 :) अधिकतम मूल्य "1 से 4 1 2 3" है 4 नहीं 2. अपने एल्गोरिथ्म बेहतर दिखाई देते हैं :) उदाहरण में –
, 1 3 1 2 4, क्यों उच्चतम स्टॉक मूल्य दिन 2 पर है? क्या यह पिछले दिन उच्चतम कीमत नहीं है? –
बहुत कम अपडेट है, अब कोई भी केवल एन बार खरीद और बेच सकता है, इस नई स्थिति का दृष्टिकोण क्या होगा? – uniquephase