मान लीजिए हमारे पास nums नामक एक सरणी है जिसमें n अलग-अलग क्यूब्स के आकार हैं, वे क्षैतिज रूप से रखे गए हैं। हमें क्यूब्स का एक ऊर्ध्वाधर ढेर बनाना है। नया क्यूब इसका पालन करना चाहिए:
- यदि ith क्यूब jth क्यूब के ऊपर है, तो jth का साइड लेंथ ith के साइड लेंथ से बड़ा या बराबर होना चाहिए।
जब हम ऊर्ध्वाधर ढेर बना रहे होते हैं, तो हम केवल बाएं या दाएं तरफ से क्यूब्स ले सकते हैं लेकिन बीच से नहीं। हमें जांचना है कि क्या हम उन्हें ढेर कर सकते हैं या नहीं।
उदाहरण के लिए, यदि इनपुट nums = [1,2,3,7,8] है, तो आउटपुट True होगा क्योंकि हम बॉक्स को दाएं से बाएं लेकर सफलतापूर्वक ढेर कर सकते हैं।
समाधान दृष्टिकोण
इसे हल करने के लिए हम निम्न चरणों का पालन करेंगे:
- n := nums का आकार
- d := nums के तत्वों से एक डबल एंडेड क्यू बनाएं
- flag := True
- prev := 0
- जब तक d खाली नहीं है, करें
- first := d[0]
- last := d[n-1]
- यदि prev 0 के समान नहीं है और (first > prev या last > prev), तो
- flag := False
- लूप से बाहर आएं
- यदि first >= last, तो
- prev := d का बायां आइटम, और इसे d से हटाएं
- अन्यथा,
- prev := d का अंतिम आइटम और इसे d से हटाएं
- यदि flag true है, तो
- True लौटाएं
- अन्यथा,
- False लौटाएं
उदाहरण
बेहतर समझ के लिए निम्न कार्यान्वयन देखें:
from collections import deque
def solve(nums):
n = len(nums)
d = deque(nums)
flag = True
prev = 0
while d:
first = d[0]
last = d[-1]
if prev != 0 and (first > prev or last > prev):
flag = False
break
if first >= last:
prev = d.popleft()
else:
prev = d.pop()
if flag:
return True
else:
return False
nums = [1,2,3,7,8]
print(solve(nums))इनपुट
[1,2,3,7,8]
आउटपुट
True