Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 72 additions & 0 deletions CPP/algorithms/arrays/max_Rectangle.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
#include <iostream>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
Comment thread
SurajS27 marked this conversation as resolved.
Outdated

// Function to calculate the largest rectangle area in a histogram
int largestRectangleArea(vector<int>& heights) {
stack<int> st;
int maxArea = 0;
int n = heights.size();

for (int i = 0; i <= n; i++) {
while (!st.empty() && (i == n || heights[st.top()] >= heights[i])) {
int height = heights[st.top()];
st.pop();
int width = st.empty() ? i : i - st.top() - 1;
maxArea = max(maxArea, height * width);
}
st.push(i);
}
Comment thread
SurajS27 marked this conversation as resolved.
Outdated

return maxArea;
}

// Function to find the maximum rectangle area in a binary matrix
int maxRectangle(vector<vector<int>>& mat) {
if (mat.empty()) return 0;

int maxArea = 0;
int rows = mat.size();
int cols = mat[0].size();
vector<int> heights(cols, 0);

for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
heights[j] = mat[i][j] == 0 ? 0 : heights[j] + 1;
}
maxArea = max(maxArea, largestRectangleArea(heights));
}

return maxArea;
}

int main() {
vector<vector<int>> mat = {
{1, 0, 1, 0, 0},
{1, 0, 1, 1, 1},
{1, 1, 1, 1, 1},
{1, 0, 0, 1, 0}
};

cout << "Maximum rectangle area: " << maxRectangle(mat) << endl;

return 0;
}

/*
* Algorithm Explanation:
* - largestRectangleArea function computes the largest rectangular area in a histogram using a stack.
* For each bar, it finds the largest rectangle that can be formed with that bar as the shortest.
*
* - maxRectangle function finds the largest rectangle in a binary matrix. It converts each row into
* a histogram of heights and calculates the maximum rectangle area by calling largestRectangleArea.
*
* Time Complexity:
* - largestRectangleArea: O(n), where n is the number of columns.
* - maxRectangle: O(rows * cols), where rows and cols are the dimensions of the matrix.
*
* Space Complexity:
* - O(cols), where cols is the number of columns in the matrix due to the heights array.
Copy link

Copilot AI Sep 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Space complexity note is incomplete: largestRectangleArea also uses a stack that can hold up to O(cols) indices, so overall auxiliary space for maxRectangle is O(cols) for heights plus O(cols) for the stack (still O(cols), but worth clarifying). Consider revising line 71 to reflect both structures.

Suggested change
* - O(cols), where cols is the number of columns in the matrix due to the heights array.
* - O(cols), where cols is the number of columns in the matrix, due to the heights array and the stack used in largestRectangleArea.

Copilot uses AI. Check for mistakes.
*/
Loading