diff --git a/C++/Maximal_rectangle.cpp b/C++/Maximal_rectangle.cpp new file mode 100644 index 0000000..7c6892e --- /dev/null +++ b/C++/Maximal_rectangle.cpp @@ -0,0 +1,84 @@ +//Problem: https://leetcode.com/problems/maximal-rectangle/ + +//Solution +#include +#include +#include +using namespace std; + +class Solution { +public: + vector nxtSmaller(vector n){ + int sz = n.size(); + vector res(sz,-1); + stack s; + for(int i=sz-1;i>=0;i--){ + if(s.empty()) + s.push(i); + else{ + while(!s.empty() && n[s.top()]>=n[i]) + s.pop(); + res[i] = !s.empty() ? s.top() : -1; + s.push(i); + } + } + return res; + } + vector prevSmaller(vector n){ + int sz = n.size(); + vector res(sz,-1); + stack s; + for(int i=0;i=n[i]) + s.pop(); + res[i] = !s.empty() ? s.top() : -1; + s.push(i); + } + } + return res; + } + int largestArea(vector num){ + int area,maxArea = INT_MIN; + int n = num.size(); + vector nxt = nxtSmaller(num); + vector prev = prevSmaller(num); + for(int i=0;i>& m) { + vector> matrix(m.size(),vector(m[0].size(),0)); + for(int i=0;i