Largest Rectangle in Histogram
Learn Nearest Smaller to Left and Nearest Smaller to Right for this
Problem Link: https://leetcode.com/problems/largest-rectangle-in-histogram/
class Solution:
def largestRectangleArea(self, heights: List[int]) -> int:
nsl=[]
nsr=[]
n=len(heights)
# NSL
s=[]
for i in range(n):
if(len(s)==0):
nsl.append(-1)
else:
if(heights[s[-1]]<heights[i]):
nsl.append(s[-1])
else:
while(len(s)>0 and heights[s[-1]]>=heights[i]):
s.pop()
if(len(s)==0):
nsl.append(-1)
else:
nsl.append(s[-1])
s.append(i)
# NSR
s=[]
for i in range(n-1,-1,-1):
if(len(s)==0):
nsr.append(n)
else:
if(heights[s[-1]]<heights[i]):
nsr.append(s[-1])
else:
while(len(s)>0 and heights[s[-1]]>=heights[i]):
s.pop()
if(len(s)==0):
nsr.append(n)
else:
nsr.append(s[-1])
s.append(i)
nsr=nsr[::-1]
print(nsl)
print(nsr)
ans=0
for i in range(n):
ans=max(ans, (nsr[i]-nsl[i]-1)*heights[i])
return ans
Last updated