leetcode 日经贴,Cpp code -Maximal Square

来源:互联网 发布:centos查看防火墙端口 编辑:程序博客网 时间:2024/06/06 00:04

Maximal Square

class Solution {public:    int maxhist(vector<int> &hist) {        int n = hist.size();        int maxarea = 0;        stack<pair<int, int> > st;        st.push(make_pair(-1, -1));        for (int i = 0; i <= n; ++i) {            int h = i < n? hist[i]:0;            int p = i;            while (!st.empty() && st.top().first >= h) {                p = st.top().second;                int t = min(st.top().first, i - p);                maxarea = max(maxarea, t * t);                st.pop();            }            st.push(make_pair(h, p));        }        return maxarea;    }    int maximalSquare(vector<vector<char>>& matrix) {        vector<int> vi;        int n = matrix.size();        if (n == 0) return 0;        int m = matrix[0].size();        if (m == 0) return 0;        vi.resize(m);        int maxarea = 0;        for (int i = 0; i < n; ++i) {            for (int j = 0; j < m ;++j) {                if (matrix[i][j] == '1') {                    vi[j]++;                } else {                    vi[j] = 0;                }            }            int t = maxhist(vi);            maxarea = max(maxarea, t);        }        return maxarea;    }};


0 0
原创粉丝点击