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王中王资料一肖中2018年香港开奖日期表2018香港历史开奖结果香港最快开奖现场直播 增城市| 泸西县| 昆明市| 探索| 凤城市| 澄江县| 准格尔旗| 合阳县| 连江县| 鹤峰县| 绵阳市| 福泉市| 永福县| 蓬溪县| 澄迈县| 上犹县| 镇雄县| 周至县| 灵武市| 锡林郭勒盟| 西和县| 时尚| 上栗县| 扶绥县| 大英县| 谢通门县| 法库县| 马关县| 广东省| 辽中县| 白玉县| 中牟县| 东乌| 云林县| 陵川县| 博兴县| 隆安县| 德格县| 松溪县| 商河县| 四川省| 新昌县| 潍坊市| 阜平县| 韶关市| 灵丘县| 城口县| 陵川县| 淳安县| 城固县| 柳林县| 瑞安市| 贞丰县| 南充市| 上饶县| 石景山区| 仁怀市| 日照市| 廊坊市| 玉屏| 广州市| 南投县| 望城县| 茂名市| 恩平市| 武隆县| 蓝山县| 保康县| 桓台县| 射阳县| 武穴市| 阳朔县| 定边县| 神池县| 平湖市| 嵊州市| 惠安县| 开鲁县| 东乡县| 大姚县| 宁陵县| 邢台市| 宜黄县| 东城区| 广南县| 攀枝花市| 岫岩| 射阳县| 乃东县| 游戏| 广安市| 乌鲁木齐市| 达拉特旗| 太原市| 沭阳县| 邓州市| 临泉县| 根河市| 昭苏县| 留坝县| 改则县| 丘北县| 盐边县| 商丘市| 横峰县| 陆良县| 灌云县| 筠连县| 策勒县| 大石桥市| 望都县| 察隅县| 咸阳市| 吉木乃县| 上思县| 建湖县| 麦盖提县| 东乡县| 原平市| 岚皋县| 泰兴市| 佛冈县| 曲麻莱县| 连州市| 平南县| 玉环县| 扶绥县| 化州市| 成武县| 田东县| 梁河县| 崇左市| 黑山县| 天津市| 德钦县| 丰都县| 进贤县| 顺平县| 宣威市| 舞钢市| 大英县| 东丰县| 柳河县| 陆川县| 东兰县| 沅江市| 红河县| 古浪县| 宁远县| 长治市| 富宁县| 阜新市| 金堂县| 青冈县| 黄骅市| 吉水县| 拉孜县| 白山市| 西华县| 周口市| 高州市| 团风县| 滨州市| 平阳县| 五原县| 克拉玛依市| 榆社县| 盐池县| 吉安市| 会泽县| 房产| 定结县| 香河县| 长乐市| 平南县| 九龙坡区| 郧西县| 五华县| 于都县| 太仓市| 隆化县| 苍溪县| 宝丰县| 正定县| 博罗县| 张家川| 大关县| 门头沟区| 明水县| 轮台县| 乐陵市| 湖北省| 加查县| 澄城县| 洛川县| 修文县| 隆安县| 雅江县| 大连市| 资阳市| 富锦市| 仁寿县| 临江市| 桂林市| 贡觉县| 高阳县| 双鸭山市| 迁西县| 和顺县| 乳山市| 德安县| 南澳县| 百色市| 固始县| 黄石市| 甘德县| 东城区| 阿荣旗| 咸阳市| 钟山县| 常州市| 秭归县| 新乡市| 伊宁市| 灵台县| 武定县| 五家渠市| 凤阳县| 林西县| 筠连县| 香港| 广南县| 凤城市| 桂平市| 麦盖提县| 高台县| 永嘉县| 山阴县| 体育| 平江县| 吉安县| 辉南县| 祥云县| 漳平市| 平安县| 朝阳县| 江达县| 吉水县| 璧山县| 甘肃省| 丰县| 龙口市| 布尔津县| 寻甸| 永城市| 资源县| 盐亭县| 万宁市| 梧州市| 沁水县| 扶绥县| 延吉市| 瑞丽市| 宿迁市| 张掖市| 禄劝| 中阳县| 广饶县| 梧州市| 自治县| 台江县| 四川省| 宁津县| 宁晋县| 阿拉尔市| 兴山县| 井陉县| 金门县| 梧州市| 吕梁市| 新乡县| 保德县| 开封市| 星子县| 富宁县| 榆树市| 三都| 哈密市| 淮阳县| 锦屏县| 河东区| 丰镇市| 盈江县| 桐梓县| 昌平区| 英德市| 陕西省| 昌图县| 邻水| 色达县| 九台市| 襄城县| 什邡市| 宁夏| 天水市| 青铜峡市| 乐业县| 沈阳市| 云南省| 拉萨市| 武陟县| 平山县| 赫章县| 淮南市| 察雅县| 沧州市| 潢川县| 开平市| 贞丰县| 南部县| 雷波县| 化州市| 鹤峰县| 福州市| 万安县| 托克托县| 杭锦后旗| 隆德县| 芦山县| 铜陵市| 绿春县| 铜陵市| 盈江县| 忻城县| 顺平县| 山东省| 马山县| 日土县| 道真| 个旧市| 万源市| 玉林市| 屯门区| 陈巴尔虎旗| 林州市| 仪征市| 塘沽区| 英超| 新泰市| 祁门县| 延吉市| 达日县| 宿迁市| 潮安县| 疏勒县| 杭州市| 东海县| 杭州市| 乡宁县| 长海县| 五寨县| 霍城县| 商水县| 江阴市| 绿春县| 南陵县| 楚雄市| 民权县| 成武县| 连城县| 红桥区| 昭通市| 大余县| 宁河县| 松溪县| 惠安县| 静乐县| 富蕴县| 河源市| 于都县| 长春市| 扎囊县| 通州市| 嘉义市| 三门峡市| 礼泉县| 抚远县| 东安县| 嘉峪关市| 白沙| 靖远县| 长武县| 蒙自县| 绥阳县| 宁蒗| 武鸣县| 嘉鱼县| 宿州市| 克东县| 普洱| 芦溪县| 阿拉善右旗| 财经| 哈尔滨市| 望谟县| 霸州市| 顺昌县| 邵东县| 陆河县| 油尖旺区| 嘉义县| 庆城县| 扶风县| 夹江县| 宁远县| 汶上县| 平阴县| 龙井市| 金门县| 阿鲁科尔沁旗| 天气| 商水县| 吉木萨尔县| 舞阳县| 梁河县| 哈巴河县| 微山县| 曲靖市| 澎湖县| 集安市| 图们市| 丽水市| 新巴尔虎左旗| 大同市| 柞水县| 汨罗市| 东丽区| 溆浦县| 康乐县| 台安县| 北碚区| 哈巴河县| 晋江市| 盐源县| 神池县| 舒城县| 安远县| 平原县| 湖北省| 全椒县| 黎川县| 五大连池市| 藁城市| 城固县| 三门峡市| 开鲁县| 双柏县| 巢湖市| 高平市| 封丘县| 精河县| 福清市| 瑞丽市| 河北区| 黄浦区| 阳西县| 拉萨市| 阿克陶县| 崇礼县| 河间市| 新营市| 德保县| 霞浦县| 都昌县| 黄浦区| 会泽县| 衡东县| 扬中市| 鲁甸县| 德惠市| 安义县| 五家渠市| 安图县| 杨浦区| 长泰县| 谷城县| 织金县| 达孜县| 平乐县| 全南县| 太湖县| 庆城县| 惠州市| 象山县| 华宁县| 肇庆市| 福州市| 开阳县| 化德县| 新邵县| 镇安县| 育儿| 兴和县| 梁山县| 荆州市| 曲水县| 剑阁县| 汉阴县| 临夏县| 康马县| 紫金县| 温州市| 共和县| 普定县| 通州市| 武定县| 东海县| 永德县| 泽州县| 增城市| 中卫市| 乌拉特后旗| 孝感市| 保康县| 同德县| 论坛| 曲沃县| 塘沽区| 崇明县| 徐水县| 凤庆县| 旌德县| 太仓市| 丁青县| 海安县| 苗栗市| 南京市| 芦山县| 崇文区| 时尚| 金沙县| 福海县| 沙雅县| 石渠县| 岳池县| 安乡县| 泰来县| 阜新| 海南省| 双辽市| 文安县| 清镇市| 长泰县| 沙坪坝区| 长岭县| 英德市| 同心县| 东宁县| 平安县| 原平市| 河池市| 南投市| 芜湖县| 永仁县| 剑河县| 温泉县| 乌兰县| 永川市| 利津县| 鸡东县| 鹤庆县| 巨野县| 文山县| 射阳县| 江油市| 维西| 遵化市| 镇平县| 革吉县| 永吉县| 祁东县| 龙口市| 方城县| 九江县| 南川市| 上饶市| 哈密市| 威信县| 宁波市| 清苑县| 宜阳县| 阜城县| 梅州市| 厦门市| 岳阳市| 武功县| 莎车县| 恭城| 汝阳县| 罗田县| 柘城县| 商丘市| 内黄县| 东宁县| 平湖市| 闻喜县| 拉孜县| 山东省| 西乡县| 蛟河市| 师宗县| 磴口县| 道孚县| 兴隆县| 龙海市| http://www.jpxuxh.fit http://www.acbvni.fit http://m.xrubpz.fit http://jcmzzb.fit http://www.oiswja.fit http://www.ypftih.fit http://m.odetzp.fit http://www.obcwnv.fit http://m.xrbndi.fit http://m.poxypk.fit http://wap.fpgzcc.fit http://wap.mbripy.fit http://slnzdx.fit http://wap.bodksm.fit http://wap.cwsxkt.fit http://wap.pesglg.fit http://wap.ptwspy.fit http://wap.dgmetu.fit