Skip to content

Commit a6b7cae

Browse files
authored
Create Maximum Rectangular Area.java
1 parent 384758f commit a6b7cae

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
//Problem Link ::https://practice.geeksforgeeks.org/problems/maximum-rectangular-area-in-a-histogram-1587115620/1?utm_source=gfg&utm_medium=article&utm_campaign=bottom_sticky_on_article
2+
class Solution
3+
{
4+
//Function to find largest rectangular area possible in a given histogram.
5+
public static long getMaxArea(long arr[], long n)
6+
{
7+
// your code here
8+
//Lets Play with Stack::::
9+
int[] right=nsr(arr);
10+
int[] left =nsl(arr);
11+
12+
//NSR , NSL ::
13+
14+
long width=0;
15+
long maxi=0;
16+
for(int i=0;i<arr.length;i++){
17+
width =right[i]-left[i]-1;
18+
maxi =Math.max(width*arr[i],maxi);
19+
}
20+
return maxi;
21+
}
22+
public static int[] nsr(long[] arr){
23+
Stack<Integer> st = new Stack();
24+
int[] right=new int[arr.length];
25+
for(int i=arr.length-1;i>=0;i--){
26+
if(st.isEmpty()){
27+
right[i] =arr.length;
28+
}else if(arr[st.peek()]<arr[i]){
29+
right[i] =st.peek();
30+
}else{
31+
while(!st.isEmpty() && arr[st.peek()]>=arr[i]){
32+
st.pop();
33+
}
34+
if(st.isEmpty()){
35+
right[i] =arr.length;
36+
}else{
37+
right[i] =st.peek();
38+
}
39+
}
40+
st.push(i);
41+
}
42+
return right;
43+
}
44+
public static int[] nsl(long[] arr){
45+
int[] left = new int[arr.length];
46+
Stack<Integer> st = new Stack();
47+
for(int i=0;i<arr.length;i++){
48+
if(st.isEmpty()){
49+
left[i] =-1;
50+
}else if(arr[st.peek()]<arr[i]){
51+
left[i] =st.peek();
52+
}else{
53+
while(!st.isEmpty() && arr[st.peek()]>=arr[i]){
54+
st.pop();
55+
}
56+
if(st.isEmpty()){
57+
left[i] =-1;
58+
}else{
59+
left[i] =st.peek();
60+
}
61+
}
62+
st.push(i);
63+
}
64+
return left;
65+
}
66+
67+
}

0 commit comments

Comments
 (0)