মান लीजिए हमारे पास एक संख्याओं की सूची है जो हिस्टोग्राम में बार्स की ऊंचाई दर्शाती है। हमें बार्स के नीचे बनने वाले सबसे बड़े आयत का क्षेत्रफल ढूंढना है।
तो, अगर इनपुट इस तरह है nums = [3, 2, 5, 7]

तो आउटपुट 10 होगा

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:
- stk := एक स्टैक और प्रारंभ में इसमें -1 डालें
- heights के अंत में 0 डालें
- ans := 0
- i को 0 से heights के आकार तक के लिए, करें
- जब तक heights[i] < heights[stk के शीर्ष], करें
- h := heights[stk के शीर्ष] और stk से पॉप करें
- w := i - stk के शीर्ष - 1
- ans := ans और (h * w) का अधिकतम
- i को stk में पुश करें
- जब तक heights[i] < heights[stk के शीर्ष], करें
- ans लौटाएं
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:
उदाहरण
class Solution:
def solve(self, heights):
stk = [-1]
heights.append(0)
ans = 0
for i in range(len(heights)):
while heights[i] < heights[stk[-1]]:
h = heights[stk.pop()]
w = i - stk[-1] - 1
ans = max(ans, h * w)
stk.append(i)
return ans
ob = Solution()
nums = [3, 2, 5, 7]
print(ob.solve(nums))
इनपुट
[3, 2, 5, 7]
आउटपुट
10