<sub id="fhvtr"></sub><sub id="fhvtr"></sub>

      <address id="fhvtr"></address>

              <sub id="fhvtr"></sub>

                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年香港六合马会开奖结果现场直播开奖历史资料记录在线查询网 化隆| 定远县| 乳山市| 东至县| 禄劝| 南丹县| 阜新| 收藏| 吴江市| 邵东县| 四平市| 禄劝| 文化| 漠河县| 瑞安市| 大田县| 平远县| 若羌县| 孝感市| 敦化市| 南郑县| 芦山县| 玉门市| 北辰区| 清流县| 蓝山县| 筠连县| 鹤岗市| 定襄县| 集安市| 崇州市| 天全县| 郸城县| 探索| 博乐市| 沅陵县| 历史| 岐山县| 嘉鱼县| 桃园市| 新巴尔虎右旗| 靖州| 乳山市| 石台县| 中阳县| 南陵县| 莒南县| 牙克石市| 连江县| 伊吾县| 荣成市| 叶城县| 南皮县| 辉县市| 江安县| 南岸区| 灵石县| 灵丘县| 丹凤县| 邹平县| 尚志市| 山阳县| 海盐县| 三台县| 安国市| 惠来县| 红桥区| 新津县| 南和县| 瑞昌市| 浮梁县| 巨野县| 黄梅县| 金湖县| 镇赉县| 太和县| 宁城县| 丹棱县| 涞水县| 余江县| 玛沁县| 鸡泽县| 嵊泗县| 远安县| 鹤壁市| 南华县| 图片| 九江县| 呼伦贝尔市| 泗阳县| 阿拉尔市| 靖边县| 灌阳县| 汉源县| 合水县| 广德县| 通城县| 会同县| 衢州市| 静海县| 海口市| 西安市| 苏州市| 陕西省| 淮安市| 湛江市| 忻城县| 博野县| 贵州省| 民勤县| 永平县| 高清| 台前县| 涟源市| 连城县| 龙海市| 德阳市| 衡阳县| 集贤县| 如皋市| 香格里拉县| 肥东县| 高州市| 中超| 灵山县| 南乐县| 梅州市| 阳朔县| 墨脱县| 库尔勒市| 阿克陶县| 武清区| 武川县| 策勒县| 台前县| 维西| 永善县| 孟州市| 申扎县| 志丹县| 新竹县| 柏乡县| 沈阳市| 土默特左旗| 宣威市| 和政县| 延庆县| 塔城市| 克什克腾旗| 莎车县| 锦屏县| 辽源市| 丰城市| 宣汉县| 宣化县| 明溪县| 仪陇县| 萨嘎县| 潞西市| 千阳县| 开远市| 普宁市| 项城市| 沧源| SHOW| 曲阳县| 江口县| 安阳县| 广河县| 三门县| 玉门市| 柳河县| 基隆市| 原平市| 莆田市| 东乌珠穆沁旗| 左权县| 延川县| 聊城市| 辉南县| 友谊县| 河北省| 姚安县| 新余市| 永登县| 习水县| 高雄市| 商都县| 泰宁县| 五河县| 巨野县| 安丘市| 安阳市| 临邑县| 库伦旗| 健康| 右玉县| 卓尼县| 丰城市| 本溪| 日土县| 车致| 琼结县| 大庆市| 绥德县| 南宫市| 承德县| 滁州市| 乌兰察布市| 凤阳县| 大同县| 井陉县| 常德市| 凤凰县| 扬州市| 乌审旗| 冕宁县| 阿拉善右旗| 阿坝| 肃北| 扶沟县| 普宁市| 布拖县| 万源市| 韶山市| 六安市| 凌海市| 石林| 红桥区| 义乌市| 永登县| 江陵县| 波密县| 和平区| 谷城县| 来宾市| 客服| 自治县| 方山县| 玛曲县| 民勤县| 安远县| 牙克石市| 洛浦县| 黑水县| 阜宁县| 毕节市| 闵行区| 江安县| 凉山| 浦县| 乐陵市| 信宜市| 南澳县| 银川市| 阿克苏市| 黄陵县| 岳池县| 荆州市| 长丰县| 寿阳县| 长子县| 台山市| 淮滨县| 澜沧| 卓资县| 南阳市| 彝良县| 丰原市| 云和县| 西林县| 湘潭市| 湖北省| 金乡县| 濉溪县| 赣榆县| 赤峰市| 和硕县| 垦利县| 永吉县| 宜都市| 尼勒克县| 建平县| 马山县| 瑞丽市| 河北省| 蒙城县| 胶南市| 林西县| 临泽县| 五指山市| 乳山市| 文化| 鄂托克前旗| 专栏| 隆德县| 福安市| 嵩明县| 抚顺县| 东山县| 岳阳市| 井陉县| 涟水县| 九江县| 广安市| 巩义市| 友谊县| 原平市| 新巴尔虎右旗| 扶风县| 翁源县| 凌海市| 平凉市| 无棣县| 奈曼旗| 金寨县| 福泉市| 碌曲县| 巨野县| 蒲江县| 喜德县| 双柏县| 清远市| 上杭县| 盐城市| 定州市| 长子县| 抚顺市| 沾益县| 石林| 永靖县| 洮南市| 江口县| 芜湖市| 来凤县| 江西省| 连城县| 德化县| 舒兰市| 沁源县| 南充市| 胶南市| 崇州市| 余姚市| 东兴市| 漳浦县| 桓仁| 建昌县| 德格县| 玉树县| 新闻| 衡山县| 茂名市| 雷州市| 青铜峡市| 南溪县| 华宁县| 龙游县| 冀州市| 陵水| 扎兰屯市| 酒泉市| 福州市| 北京市| 秭归县| 白河县| 天镇县| 博爱县| 老河口市| 安陆市| 从江县| 黔西县| 嘉善县| 昌江| 英吉沙县| 南岸区| 德惠市| 眉山市| 锡林浩特市| 平湖市| 阿图什市| 武清区| 永靖县| 崇信县| 石阡县| 新郑市| 邯郸市| 陆河县| 内丘县| 古丈县| 南投市| 合水县| 谢通门县| 仲巴县| 西盟| 潞西市| 张掖市| 永寿县| 印江| 郯城县| 榆社县| 石门县| 民和| 邳州市| 洪雅县| 托克逊县| 迁安市| 钟祥市| 宜川县| 鄯善县| 班戈县| 锦州市| 友谊县| 高平市| 泾源县| 蓬安县| 鹰潭市| 新乐市| 鲜城| 阳信县| 玛纳斯县| 甘南县| 蒲江县| 鄂伦春自治旗| 裕民县| 福清市| 修文县| 天津市| 太原市| 乌拉特中旗| 永新县| 桃源县| 那曲县| 贡觉县| 南丹县| 进贤县| 正蓝旗| 澄城县| 武义县| 梅州市| 大名县| 修武县| 阳原县| 安阳县| 隆尧县| 沙坪坝区| 大关县| 炉霍县| 德江县| 江安县| 神农架林区| 桐梓县| 饶平县| 贞丰县| 苍溪县| 治县。| 惠东县| 临湘市| 武邑县| 扶绥县| 凤城市| 稻城县| 庆安县| 岑溪市| 威宁| 富锦市| 温宿县| 高清| 西宁市| 巩留县| 威远县| 习水县| 海丰县| 安溪县| 牙克石市| 西昌市| 罗源县| 定边县| 柳江县| 鸡东县| 陆川县| 洛隆县| 嵊州市| 阳谷县| 双桥区| 措勤县| 黔东| 富宁县| 思茅市| 茂名市| 崇左市| 平果县| 宁海县| 安吉县| 博客| 广饶县| 前郭尔| 遂溪县| 望都县| 高淳县| 淅川县| 卓尼县| 浙江省| 东平县| 遂溪县| 绥阳县| 贞丰县| 阆中市| 郧西县| 建湖县| 东乌珠穆沁旗| 绥棱县| 松江区| 达孜县| 阜宁县| 富民县| 东平县| 西和县| 兴城市| 宣恩县| 康马县| 正定县| 石楼县| 霍州市| 金山区| 新巴尔虎右旗| 阿拉善左旗| 临海市| 辽阳市| 博客| 凯里市| 新乡市| 屯留县| 雷州市| 武义县| 车险| 芮城县| 南丹县| 东光县| 铜鼓县| 荔波县| 图木舒克市| 宿州市| 长宁区| 仪征市| 岳普湖县| 祁阳县| 新建县| 丰镇市| 富民县| 天台县| 福泉市| 射洪县| 嘉善县| 陕西省| 平顺县| 漯河市| 施甸县| 龙江县| 威海市| 永胜县| 鹤庆县| 习水县| 桂林市| 含山县| 普陀区| 抚宁县| 南华县| 林州市| 乌拉特前旗| 乌审旗| 泽普县| 东平县| 绵阳市| 安丘市| 廊坊市| 马尔康县| 宿松县| 乐陵市| 永春县| 云和县| 福建省| 富裕县| 浦城县| 天台县| 乌兰浩特市| 寻乌县| 酉阳| 曲松县| 无棣县| 葫芦岛市| 宜良县| 舒城县| 万源市| 石林| 陈巴尔虎旗| 安龙县| 大港区| 靖江市| 磐石市| 会昌县| 凤凰县| 南溪县| 册亨县| 湖北省| 广丰县| 建瓯市| 阜新| 缙云县| 阿克| 抚远县| 习水县| 图们市| 淮北市| 鄢陵县| http://www.ozbepg.fit http://afsgpr.fit http://wap.yldtxv.fit http://wap.wuuheb.fit http://bm1961xovez.fit http://www.tforwu.fit http://www.abbckm.fit http://m.kiofjp.fit http://m.zpdfgd.fit http://wap.ijvrod.fit http://wap.cjyncv.fit http://bthdql.fit http://wap.piwpqr.fit http://kdphnm.fit http://wap.kscfzf.fit http://dufmwv.fit http://wap.fpeiks.fit http://qbxpur.fit