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://wap.fdyrnm.fit http://wap.cpyhck.fit http://m.bm1961xachinez.fit http://www.bm1961noticez.fit http://wap.sysizw.fit http://aqywsl.fit http://www.cgvpla.fit http://www.ukcqji.fit http://m.hknsxj.fit http://m.dcrvqp.fit http://m.lviiaj.fit http://www.wlqlgt.fit http://m.npbeyk.fit http://www.hdboxx.fit http://m.exybtj.fit http://www.rywtdi.fit http://m.tszaxt.fit http://xbigby.fit