Skip to content

Commit 36651f4

Browse files
authored
84.cpp
largest area of histogram
1 parent 54dce1d commit 36651f4

File tree

1 file changed

+124
-0
lines changed

1 file changed

+124
-0
lines changed

Diff for: 84.cpp

+124
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
class Solution {
2+
public:
3+
int largestRectangleArea(vector<int>& A) {
4+
int n=A.size();
5+
stack<int>s;
6+
vector<int>nsr;
7+
for(int i=n-1;i>=0;i--)
8+
{
9+
if(s.empty())
10+
{
11+
nsr.push_back(n);
12+
}
13+
else if(A[s.top()]<A[i])
14+
{
15+
nsr.push_back(s.top());
16+
}
17+
else if(A[s.top()]>=A[i])
18+
{
19+
while(!s.empty()&&A[s.top()]>=A[i])
20+
{
21+
s.pop();
22+
}
23+
if(s.empty())
24+
{
25+
nsr.push_back(n);
26+
}
27+
else
28+
nsr.push_back(s.top());
29+
}
30+
s.push(i);
31+
}
32+
reverse(nsr.begin(),nsr.end());
33+
stack<int>ss;
34+
vector<int>nsl;
35+
for(int i=0;i<n;i++)
36+
{
37+
if(ss.empty())
38+
{
39+
nsl.push_back(-1);
40+
}
41+
else if(A[ss.top()]<A[i])
42+
{
43+
nsl.push_back(ss.top());
44+
}
45+
else if(A[ss.top()]>=A[i])
46+
{
47+
while(!ss.empty()&&A[ss.top()]>=A[i])
48+
ss.pop();
49+
if(ss.empty())
50+
{
51+
nsl.push_back(-1);
52+
}
53+
else
54+
nsl.push_back(ss.top());
55+
}
56+
ss.push(i);
57+
}
58+
int ans=0;
59+
for(int i=0;i<n;i++)
60+
{
61+
ans=max(ans,(nsr[i]-nsl[i]-1)*A[i]);
62+
}
63+
return ans; n=A.size();
64+
stack<int>s;
65+
vector<int>nsr;
66+
for(int i=n-1;i>=0;i--)
67+
{
68+
if(s.empty())
69+
{
70+
nsr.push_back(n);
71+
}
72+
else if(A[s.top()]<A[i])
73+
{
74+
nsr.push_back(s.top());
75+
}
76+
else if(A[s.top()]>=A[i])
77+
{
78+
while(!s.empty()&&A[s.top()]>=A[i])
79+
{
80+
s.pop();
81+
}
82+
if(s.empty())
83+
{
84+
nsr.push_back(n);
85+
}
86+
else
87+
nsr.push_back(s.top());
88+
}
89+
s.push(i);
90+
}
91+
reverse(nsr.begin(),nsr.end());
92+
stack<int>ss;
93+
vector<int>nsl;
94+
for(int i=0;i<n;i++)
95+
{
96+
if(ss.empty())
97+
{
98+
nsl.push_back(-1);
99+
}
100+
else if(A[ss.top()]<A[i])
101+
{
102+
nsl.push_back(ss.top());
103+
}
104+
else if(A[ss.top()]>=A[i])
105+
{
106+
while(!ss.empty()&&A[ss.top()]>=A[i])
107+
ss.pop();
108+
if(ss.empty())
109+
{
110+
nsl.push_back(-1);
111+
}
112+
else
113+
nsl.push_back(ss.top());
114+
}
115+
ss.push(i);
116+
}
117+
int ans=0;
118+
for(int i=0;i<n;i++)
119+
{
120+
ans=max(ans,(nsr[i]-nsl[i]-1)*A[i]);
121+
}
122+
return ans;
123+
}
124+
};

0 commit comments

Comments
 (0)