मान लीजिए कि हमारे पास संख्याओं की एक सूची है जिसे लॉग कहा जाता है और एक अन्य मूल्य सीमा है। लॉग में प्रत्येक तत्व [i] i-वें उपयोगकर्ता द्वारा उत्पन्न लॉग के आकार का प्रतिनिधित्व करता है। और सीमा लॉग के कुल आकार का प्रतिनिधित्व करती है जिसे हम अपने डेटाबेस में स्टोर कर सकते हैं। हमें सबसे बड़ा x ऐसे खोजना होगा कि यदि हम लॉग में प्रत्येक लॉग को अधिकतम आकार x पर छोटा करते हैं, और बाएं लॉग आकारों का योग अधिकतम सीमा पर है। यदि किसी लॉग को छोटा करने की आवश्यकता नहीं है, तो बस सबसे बड़ा लॉग आकार लौटाएं।
इसलिए, यदि इनपुट लॉग की तरह है =[500, 200, 10000, 500, 4000] सीमा =300, तो आउटपुट 900 होगा, क्योंकि हम लॉग को 900 तक छोटा करते हैं, तो हम [500, 200, 900, 500] प्राप्त कर सकते हैं , 900] अब योग 3000 है
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- लो :=0
- नमस्ते :=1 + अधिकतम लॉग्स
- जबकि लो + 1 <हाय, करो
- मील :=लो + फ्लोर ऑफ़ (हाय - लो)/2
- यदि सूची में मौजूद सभी तत्वों का योग (न्यूनतम मील और प्रत्येक लॉग इन लॉग के लिए लॉग) <=सीमा, तो
- लो :=मील
- अन्यथा,
- नमस्ते :=मील
- वापसी लो
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def solve(logs, limit): lo, hi = 0, max(logs) + 1 while lo + 1 < hi: mi = lo + (hi - lo) // 2 if sum(min(mi, log) for log in logs) <= limit: lo = mi else: hi = mi return lo logs = [500, 200, 10000, 500, 4000] limit = 3000 print(solve(logs, limit))
इनपुट
[500, 200, 10000, 500, 4000], 3000
आउटपुट
900