<address id="jv157"></address>
<sub id="jv157"></sub>

      <address id="jv157"></address>

      <thead id="jv157"></thead>

        leetcode-85-最大矩形

        题目描述:

        方法一:动态规划+使用柱状图的优化暴力方法 O(N*2M) O(NM) N为行数

        class Solution:
            def maximalRectangle(self, matrix: List[List[str]]) -> int:
                maxarea = 0
        
                dp = [[0] * len(matrix[0]) for _ in range(len(matrix))]
                for i in range(len(matrix)):
                    for j in range(len(matrix[0])):
                        if matrix[i][j] == 0: continue
        
                        # compute the maximum width and update dp with it
                        width = dp[i][j] = dp[i][j-1] + 1 if j else 1
        
                        # compute the maximum area rectangle with a lower right corner at [i, j]
                        for k in range(i, -1, -1):
                            width = min(width, dp[k][j])
                            maxarea = max(maxarea, width * (i-k+1))
                return maxarea

        方法二:栈 参考84题 O(NM) O(M)

        class Solution:
            def maximalRectangle(self, matrix: List[List[str]]) -> int:
                if not matrix: return 0
                maxarea = 0
                dp = [0 for _ in range(len(matrix[0]))]
                for i in range(len(matrix)):
                    for j in range(len(matrix[0])):
                        dp[j] = dp[j] + 1 if matrix[i][j] == "1" else 0
                    maxarea = max(maxarea,self.largestRectangleArea(dp))
                return maxarea
        
            def largestRectangleArea(self, heights: List[int]) -> int:
                stack = [0]
                heights = [0] + heights + [0]
                res = 0
                for i in range(len(heights)):
                    while heights[stack[-1]] > heights[i]:
                        tmp = stack.pop()
                        res = max(res, (i - stack[-1] - 1) * heights[tmp])
                    stack.append(i)
                return res

        方法三:动态规划  O(NM)

        class Solution:
            def maximalRectangle(self, matrix: List[List[str]]) -> int:
                if not matrix or not matrix[0]: return 0
                row = len(matrix)
                col = len(matrix[0])
                left_j = [-1] * col
                right_j = [col] * col
                height_j = [0] * col
                res = 0
                for i in range(row):
                    cur_left = -1
                    cur_right = col
        
                    for j in range(col):
                        if matrix[i][j] == "1":
                            height_j[j] += 1
                        else:
                            height_j[j] = 0
        
                    for j in range(col):
                        if matrix[i][j] == "1":
                            left_j[j] = max(left_j[j], cur_left)
                        else:
                            left_j[j] = -1
                            cur_left = j
        
                    for j in range(col - 1, -1, -1):
                        if matrix[i][j] == "1":
                            right_j[j] = min(right_j[j], cur_right)
                        else:
                            right_j[j] = col
                            cur_right = j
                    for j in range(col):
                        res = max(res, (right_j[j] - left_j[j] - 1) * height_j[j])
                return res
        相关文章
        相关标签/搜索
        2020年正版综合资料 建阳市| 连南| 民权县| 浦江县| 济源市| 关岭| 中山市| 固镇县| 精河县| 凌海市| 西城区| 曲松县| 年辖:市辖区| 北辰区| 大田县| 资源县| 石门县| 大悟县| 辽阳县| 城市| 石嘴山市| 民勤县| 安远县| 牙克石市| 军事| 法库县| 彭州市| 柳河县| 安乡县| 荥经县| 汉阴县| 阳曲县| 建平县| 共和县| 渝北区| 中山市| 广昌县| 陈巴尔虎旗| 突泉县| 宁城县| 伊通| 无为县| 资阳市| 博乐市| 太仆寺旗| 洪江市| 广元市| 哈巴河县| 苏尼特右旗| 巫溪县| 连江县| 宜兴市| 叶城县| 察雅县| 浙江省| 天全县| 泊头市| 阿合奇县| 宝兴县| 手游| 南投市| 景谷| 卓尼县| 大名县| 平安县| 蒙自县| 沾化县| 碌曲县| 平潭县| 黄龙县| 宁国市| 绿春县| 湘潭市| 土默特左旗| 汉源县| 永和县| 商丘市| 泰宁县| 涟水县| 上高县| 龙泉市| 兴城市| 山阳县| 沅江市| 时尚| 招远市| 丁青县| 黑龙江省| 班戈县| 云梦县| 盐山县| 德化县| 丹江口市| 凤庆县| 英山县| 驻马店市| 封丘县| 栾城县| 雷山县| 龙山县| 维西| 泊头市| 慈利县| 泾源县| 太湖县| 彭州市| 怀来县| 阿勒泰市| 海淀区| 临猗县| 沂南县| 乌兰察布市| 利津县| 扎鲁特旗| 朝阳市| 南岸区| 化德县| 六枝特区| 周宁县| 鹿泉市| 静乐县| 五莲县| 广平县| 乌兰浩特市| 色达县| 兴山县| 博罗县| 建瓯市| 临漳县| 宁武县| 陇西县| 资中县| 西青区| 洞口县| 大英县| 吉木萨尔县| 准格尔旗| 灵寿县| 汽车| 吐鲁番市| 娱乐| 阳新县| 耒阳市| 泰顺县| 九龙城区| 承德市| 芒康县| 阿巴嘎旗| 会泽县| 中超| 化隆| 平定县| 巴林左旗| 修武县| 淅川县| 平潭县| 天津市| 泾阳县| 双牌县| 平潭县| 沙田区| 婺源县| 建水县| 峡江县| 民乐县| 三河市| 齐齐哈尔市| 崇文区| 彰化市| 贵溪市| 闽侯县| 通河县| 乌兰县| 夏邑县| 广丰县| 青河县| 社旗县| 科尔| 长治县| 沧源| 尤溪县| 滨州市| 四会市| 鹤山市| 汉寿县| 尉氏县| 九江县| 湘潭县| 女性| 垫江县| 灌阳县| 闽清县| 永寿县| 六安市| 黑山县| 冕宁县| 黑龙江省| 鹤庆县| 蒙自县| 普兰县| 华宁县| 镇宁| 安陆市| 东山县| 呼伦贝尔市| 夏邑县| 庆阳市| 彰化市| 海淀区| 柘城县| 古交市| 子洲县| 龙江县| 辰溪县| 云安县| 淮南市| 鄂伦春自治旗| 万源市| 驻马店市| 会宁县| 南阳市| 大宁县| 兴仁县| 苏尼特左旗| 阿拉善右旗| 宽甸| 丹东市| 上高县| 黄陵县| 武城县| 芮城县| 寿宁县| 安溪县| 莱芜市| 临桂县| 肥东县| 利辛县| 连城县| 潜山县| 阜宁县| 舟曲县| 西平县| 高淳县| 剑河县| 翼城县| 永胜县| 西乡县| 元氏县| 中阳县| 墨玉县| 莫力| 三台县| 桃源县| 兰西县| 吴忠市| 连城县| 天长市| 洱源县| 南靖县| 清苑县| 滨州市| 肥西县| 武宁县| 饶平县| 凤山县| 信丰县| 广水市| 崇阳县| 邹城市| 乳山市| 克拉玛依市| 扎鲁特旗| 库伦旗| 巫山县| 兴安盟| 登封市| 琼海市| 罗平县| 二连浩特市| 绿春县| 建始县| 汉寿县| 宁安市| 准格尔旗| 雷州市| 通化县| 瓮安县| 靖安县| 时尚| 梁山县| 二手房| 内黄县| 买车| 顺义区| 来安县| 公主岭市| 仪陇县| 大姚县| 青铜峡市| 无锡市| 晋城| 宁强县| 修文县| 尚志市| 永济市| 神农架林区| 垫江县| 吉隆县| 辽阳县| 会理县| 台中市| 柏乡县| 海城市| 陵水| 商南县| 吉木乃县| 读书| 监利县| 樟树市| 新乐市| 黔西县| 寿光市| 阿拉善左旗| 东丽区| 东辽县| 中江县| 苏尼特左旗| 平泉县| http://3g.yqo1j4rl6v.fun http://3g.yqo2j9rl3v.fun http://3g.gz1980zanc.fun http://3g.yqo5j5rl7v.fun http://3g.bo2020ends.fun http://3g.yqo8j2rl1v.fun http://3g.bo2020gains.fun http://3g.gz1980requestc.fun http://3g.gz1980attendc.fun http://3g.yqo3j0rl9v.fun http://3g.bo2020boats.fun http://3g.gz1980appealc.fun http://3g.yqo0j8rl8v.fun http://3g.gz1980zassc.fun http://3g.jvz0j0r9o.fun http://3g.gz1980slidec.fun http://3g.gz1980appealc.fun http://3g.bo2020wets.fun