मान लीजिए, हमारे पास पूर्णांक वाले दो सरणियाँ हैं। एक सूची में कुछ इकाई चौड़ाई वाले बक्सों की ऊँचाई होती है और दूसरी सूची में गोदाम में कमरों की ऊँचाई होती है। कमरों की संख्या 0...n है, और कमरों की ऊंचाई सरणी गोदाम में उनके संबंधित सूचकांक में प्रदान की जाती है। हमें पता लगाना है कि कितने बक्सों को गोदाम में धकेला जा सकता है। कुछ बातों को ध्यान में रखना होगा,
-
बक्सों को एक दूसरे के ऊपर नहीं रखा जा सकता।
-
बक्सों का क्रम बदला जा सकता है।
-
बक्सों को केवल बाएं से दाएं गोदाम में रखा जाता है।
यदि कोई बॉक्स कमरे की ऊंचाई से लंबा है, तो उसके दाईं ओर के सभी बक्सों के साथ बॉक्स को गोदाम में नहीं धकेला जा सकता है।
इसलिए, यदि इनपुट बॉक्स =[4,5,6], गोदाम =[4, 5, 6, 7] की तरह है, तो आउटपुट 1 होगा केवल एक बॉक्स डाला जा सकता है। पहला कमरा आकार 4 का है और बाकी को गोदाम में नहीं धकेला जा सकता क्योंकि बक्सों को पहले कमरे से धकेलना पड़ता है और इसकी लंबाई अन्य बक्सों से छोटी होती है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
सूची बक्सों को क्रमित करें
-
curmin :=एक नई सूची जिसमें गोदाम का पहला तत्व शामिल है
-
सेमी:=कर्मिन[0]
-
क्योंकि मैं 1 से लेकर गोदाम के आकार के बीच में हूं, ऐसा करें
-
वक्र:=गोदाम[i]
-
अगर वक्र <सेमी, तो
-
सेमी:=वक्र
-
-
करमिन के अंत में सेमी डालें
-
-
मैं :=0
-
j :=गोदाम का आकार -1
-
आर:=0
-
जबकि j>=0 और i <बक्सों का आकार, करते हैं
-
अगर curmin[j]>=boxs[i], तो
-
मैं :=मैं + 1
-
आर:=आर + 1
-
-
जे:=जे - 1
-
-
वापसी आर
उदाहरण (पायथन)
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def solve(boxes, godown): boxes.sort() curmin = [godown[0]] cm = curmin[0] for i in range(1, len(godown)): cur = godown[i] if cur < cm: cm = cur curmin.append(cm) i,j = 0, len(godown)-1 r = 0 while j >= 0 and i < len(boxes): if curmin[j] >= boxes[i]: i += 1 r += 1 j -= 1 return r print(solve([4,5,6], [4, 5, 6, 7]))
इनपुट
[4,5,6], [4, 5, 6, 7]
आउटपुट
1