• 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特马开奖结果查询三肖中特期期准免费118图库 汕头市| 芜湖市| 于都县| 临潭县| 获嘉县| 安岳县| 体育| 寻甸| 长兴县| 安乡县| 米泉市| 乾安县| 宜州市| 额敏县| 乌拉特前旗| 九龙坡区| 涡阳县| 汪清县| 泰兴市| 乌兰察布市| 大石桥市| 合水县| 吉首市| 通榆县| 志丹县| 滕州市| 湟中县| 琼结县| 河东区| 闸北区| 长春市| 桦川县| 临猗县| 陈巴尔虎旗| 长垣县| 修武县| 格尔木市| 松江区| 海南省| 阳高县| 恩平市| 麻栗坡县| 清镇市| 沙河市| 敖汉旗| 顺昌县| 钟祥市| 保山市| 青神县| 新化县| 平顺县| 天峨县| 乌鲁木齐县| 浪卡子县| 德惠市| 喜德县| 睢宁县| 吴川市| 万源市| 交城县| 辽源市| 翁牛特旗| 铜川市| 井研县| 莒南县| 香河县| 桂阳县| 呼伦贝尔市| 台中市| 平邑县| 兰州市| 綦江县| 五家渠市| 阜阳市| 黄山市| 韶关市| 罗山县| 安乡县| 蒙自县| 麦盖提县| 益阳市| 高淳县| 女性| 台安县| 泾源县| 余江县| 肇庆市| 延长县| 永寿县| 安西县| 安徽省| 铁岭市| 稷山县| 昌江| 镇平县| 北宁市| 贞丰县| 扎赉特旗| 华池县| 白城市| 油尖旺区| 乾安县| 兴业县| 鄯善县| 盐城市| 东台市| 武义县| 盘山县| 花莲县| 密云县| 南投县| 米易县| 肥城市| 禄劝| 离岛区| 郧西县| 湟中县| 尉氏县| 尼玛县| 郑州市| 京山县| 云浮市| 蓬安县| 杂多县| 富川| 宜昌市| 福清市| 涞水县| 施甸县| 丰镇市| 鹤山市| 涞源县| 新化县| 扶风县| 平遥县| 青田县| 大丰市| 南京市| 武宁县| 鹤岗市| 奇台县| 革吉县| 盐源县| 南城县| 和静县| 即墨市| 五家渠市| 长春市| 枝江市| 丰原市| 尖扎县| 晋城| 永胜县| 塔城市| 南开区| 富平县| 珠海市| 新干县| 尉犁县| 南充市| 七台河市| 阳江市| 巴彦淖尔市| 泸定县| 黄山市| 乐昌市| 噶尔县| 精河县| 廊坊市| 张北县| 华亭县| 涟源市| 夹江县| 德庆县| 岱山县| 秀山| 庄河市| 田阳县| 勃利县| 类乌齐县| 体育| 乳源| 民勤县| 金坛市| 胶州市| 来凤县| 红河县| 江口县| 潞西市| 鹿邑县| 盘锦市| 安康市| 樟树市| 柯坪县| 山东省| 板桥市| 临安市| 潜江市| 保康县| 从化市| 阜康市| 广南县| 嘉祥县| 贡山| 临朐县| 调兵山市| 大埔县| 于都县| 兴义市| 庐江县| 庄浪县| 洪湖市| 镇沅| 太保市| 栾城县| 嘉祥县| 江安县| 丁青县| 南漳县| 崇礼县| 昌吉市| 乐山市| 七台河市| 郁南县| 客服| 木里| 高尔夫| 建平县| 微山县| 蓬莱市| 余江县| 松原市| 闻喜县| 巩留县| 井研县| 即墨市| 武川县| 中西区| 鹿邑县| 黄骅市| 新沂市| 大关县| 邯郸市| 巴林右旗| 浦城县| 潍坊市| 资溪县| 丰城市| 抚顺市| 西乌珠穆沁旗| 马龙县| 宁远县| 福建省| 肥乡县| 凤山市| 蓝山县| 内丘县| 津市市| 刚察县| 化德县| 上栗县| 蕉岭县| 商水县| 青神县| 建水县| 灵山县| 建始县| 图们市| 衡水市| 靖边县| 吉林省| 洱源县| 兴隆县| 枝江市| 剑河县| 新闻| 和林格尔县| 台湾省| 吴江市| 漳浦县| 长岛县| 抚州市| 宁国市| 阳原县| 达尔| 得荣县| 安义县| 阳泉市| 丰城市| 朝阳区| 连州市| 澄城县| 社会| 梅河口市| 公安县| 孝感市| 通山县| 梁山县| 拜泉县| 栾城县| 册亨县| 福州市| 永德县| 虞城县| 沙雅县| 南平市| 江油市| 乌拉特中旗| 定襄县| 铅山县| 吴旗县| 手机| 屯门区| 元江| 江门市| 东源县| 永泰县| 兰坪| 安溪县| 景谷| 都匀市| 清河县| 石首市| 班戈县| 深泽县| 沭阳县| 叙永县| 吴旗县| http://3g.bo2020trusts.fun http://3g.gz1980inkc.fun http://3g.jvz0j1r5o.fun http://3g.yqo1j6rl3v.fun http://3g.bo2020drops.fun http://3g.gz1980replacec.fun http://3g.gz1980rapec.fun http://3g.yqo8j2rl9v.fun http://3g.bo2020rezains.fun http://3g.bo2020cazps.fun http://3g.gz1980conc.fun http://3g.yqo0j3rl5v.fun http://3g.gz1980topc.fun http://3g.yqo1j4rl6v.fun http://3g.gz1980reversec.fun http://3g.yqo7j8rl1v.fun http://3g.bo2020lives.fun http://3g.gz1980claizc.fun