1. <mark id="s2zkv"><ol id="s2zkv"></ol></mark>
      <mark id="s2zkv"></mark>

        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.yqo7j7rl2v.fun http://3g.yqo0j6rl9v.fun http://3g.bo2020regards.fun http://3g.gz1980cozfortc.fun http://3g.bo2020shares.fun http://3g.yqo8j3rl0v.fun http://3g.gz1980counterc.fun http://3g.bo2020guards.fun http://3g.yqo0j1rl0v.fun http://3g.yqo6j4rl5v.fun http://3g.gz1980coolc.fun http://3g.gz1980shopc.fun http://3g.bo2020arrays.fun http://3g.bo2020evens.fun http://3g.bo2020quarters.fun http://3g.yqo5j2rl5v.fun http://3g.yqo6j3rl9v.fun http://3g.yqo6j4rl0v.fun