मान लीजिए कि हमारे पास पूर्णांकों के साथ एक सरणी है जिसे अंक कहा जाता है, हमारे पास अन्य दो मान m और k भी हैं। अब, हमें मी बुके बनाने की जरूरत है। एक गुलदस्ता बनाने के लिए हमें बगीचे से लगे k फूलों की आवश्यकता होती है। यहाँ बगीचे में n अलग-अलग फूल होते हैं, ith फूल खिलने के दिन [i] खिलेगा। प्रत्येक फूल का उपयोग केवल एक गुलदस्ते के अंदर किया जा सकता है। बगीचे से मी के गुलदस्ते बनाने के लिए हमें कम से कम कितने दिनों तक प्रतीक्षा करनी होगी। अगर हम मी बुके नहीं बना सकते हैं, तो -1 लौटा दें।
इसलिए, यदि इनपुट ब्लूमडे =[5,5,5,5,10,5,5] m =2 k =3 जैसा है, तो आउटपुट 10 होगा क्योंकि हमें 2 (m =2) गुलदस्ते चाहिए और प्रत्येक को चाहिए 3 फूल हैं।
-
5 दिन के बाद [x, x, x, x, _, x, x], हम पहले तीन फूलों का एक गुलदस्ता बना सकते हैं जो खिले थे, लेकिन दूसरा गुलदस्ता नहीं बना सकते थे
-
दिन 10 के बाद:[x, x, x, x, x, x, x], अब हम अलग-अलग तरीकों से दो गुलदस्ते बना सकते हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
n :=ब्लूमडे का आकार
-
अगर एम * के> एन, तो
-
वापसी -1
-
-
संभव() फ़ंक्शन को परिभाषित करें। इसमें x लगेगा
-
गिनती :=0, गुलदस्ते :=0
-
ब्लूमडे में प्रत्येक d के लिए, करें
-
अगर डी <=एक्स, तो
-
गिनती :=गिनती + 1
-
अगर गिनती k के समान है, तो
-
गुलदस्ते :=गुलदस्ते + 1
-
गिनती :=0
-
-
-
अन्यथा,
-
गिनती :=0
-
-
-
अगर गुलदस्ते>=मी, अन्यथा गलत हैं तो सही लौटें
-
मुख्य विधि से निम्न कार्य करें -
-
बाएँ:=0, दाएँ:=1 + अधिकतम खिलने का दिन
-
जबकि बाएं <दाएं, करें
-
मध्य:=(बाएं+दाएं)/2
-
यदि संभव हो (मध्य) सत्य है, तो
-
दाएं:=मध्य
-
-
अन्यथा,
-
बायां :=मध्य + 1
-
-
-
यदि संभव हो (बाएं) सत्य है, तो
-
बाएं लौटें
-
-
अन्यथा बाएं लौटें + 1
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
def solve(bloomDay, m, k): n = len(bloomDay) if m * k > n: return -1 def possible(x): count = 0 bouquets = 0 for d in bloomDay: if d <= x: count += 1 if count == k: bouquets += 1 count = 0 else: count = 0 return bouquets >= m left, right = 0, max(bloomDay) + 1 while left < right: mid = (left + right)//2 if possible(mid): right = mid else: left = mid + 1 if possible(left): return left else: return left + 1 bloomDay = [5,5,5,5,10,5,5] m = 2 k = 3 print(solve(bloomDay, m, k))
इनपुट
[5,5,5,5,10,5,5], 2, 3
आउटपुट
10