84.柱状图中最大的矩形
public class Solution {
public int LargestRectangleArea(int[] heights) {
int[] newHeights=new int[heights.Length+2];
newHeights[0]=0;
newHeights[newHeights.Length-1]=0;
for(int index=0;index<heights.Length;index++)
{
newHeights[index+1]=heights[index];
}
heights=newHeights;
var st=new Stack<int>();
st.Push(0);
int ans=0;
for(int i=1;i<heights.Length;i++)
{
if(heights[i]>heights[st.Peek()])
{
st.Push(i);
}else if(heights[i]==heights[st.Peek()])
{
st.Pop();
st.Push(i);
}else{
while(heights[i]<heights[st.Peek()])
{
int mid=st.Peek();
st.Pop();
int Left=st.Peek();
int right=i;
int w=right-Left-1;
int h=heights[mid];
ans=Math.Max(w*h,ans);
}
st.Push(i);
}
}
return ans;
}
}