<menu id="gc4q0"></menu>
  • <menu id="gc4q0"></menu>
  • <input id="gc4q0"></input>
    <nav id="gc4q0"></nav>
  • <input id="gc4q0"><acronym id="gc4q0"></acronym></input>
  • 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
    相关文章
    相关标签/搜索
    香港最快現场开奖结果118图库天下彩天空彩免费大全香港蓝月亮精选资料六合宝典天天彩票新版 社会| 精河县| 黑龙江省| 栖霞市| 兴城市| 濮阳县| 纳雍县| 车致| 华宁县| 北碚区| 台山市| 白山市| 深泽县| 靖江市| 平定县| 靖宇县| 原阳县| 盐源县| 沙雅县| 黄浦区| 耒阳市| 襄樊市| 鲁甸县| 泾源县| 平遥县| 报价| 衡山县| 新安县| 乐亭县| 遂昌县| 贵港市| 昌江| 合作市| 漳州市| 连州市| 南江县| 梁河县| 米脂县| 山丹县| 越西县| 广安市| 阳江市| 土默特右旗| 莎车县| 南宁市| 甘泉县| 七台河市| 翁源县| 临潭县| 蛟河市| 安庆市| 石门县| 上饶市| 平邑县| 余干县| 涞水县| 萨迦县| 栾川县| 朝阳区| 化州市| 读书| 阿克苏市| 两当县| 东宁县| 上蔡县| 富顺县| 怀化市| 唐河县| 灯塔市| 奈曼旗| 和田市| 濮阳市| 彭阳县| 原阳县| 塘沽区| 宜都市| 玛曲县| 庆安县| 龙江县| 遂川县| 封丘县| 吉首市| 长沙市| 石屏县| 聊城市| 昌邑市| 松江区| 桦甸市| 长武县| 静安区| 贞丰县| 阳原县| 尤溪县| 秭归县| 贺兰县| 兴隆县| 安平县| 伊金霍洛旗| 泰宁县| 农安县| 明星| 桑植县| 牡丹江市| 阿合奇县| 章丘市| 广平县| 宜阳县| 沙雅县| 绍兴县| 诸城市| 英德市| 和硕县| 淮安市| 珲春市| 牙克石市| 石屏县| 鹿邑县| 肃宁县| 临洮县| 巩义市| 久治县| 双峰县| 前郭尔| 天台县| 平昌县| 台中市| 怀化市| 张掖市| 海兴县| 沁水县| 子长县| 曲麻莱县| 甘孜县| 诸城市| 深州市| 大渡口区| 客服| 卢龙县| 原阳县| 武定县| 山丹县| 工布江达县| 沿河| 涪陵区| 慈利县| 青田县| 文安县| 马尔康县| 太仓市| 毕节市| 建德市| 宜川县| 永和县| 台前县| 丰镇市| 临沂市| 郯城县| 铜川市| 新源县| 成安县| 格尔木市| 佛教| 南川市| 潼南县| 庐江县| 都安| 内乡县| 瓦房店市| 富宁县| 杭州市| 宜兰县| 靖安县| 盈江县| 朝阳县| 监利县| 沅江市| 西和县| 彭山县| 武穴市| 温州市| 万安县| 清河县| 宜州市| 张家川| 和硕县| 天镇县| 醴陵市| 从江县| 阿克| 资讯| 南汇区| 萝北县| 卢龙县| 社会| 宁德市| 临泉县| 泽州县| 房产| 凌海市| 惠来县| 邮箱| 高平市| 长丰县| 双牌县| 玉林市| 瓮安县| 中方县| 日土县| 连平县| 韶山市| 福建省| 大连市| 南涧| 新化县| 星子县| 沙田区| 余姚市| 瑞丽市| 达拉特旗| 晋江市| 寻乌县| 营山县| 南华县| 白朗县| 永平县| 新泰市| 铜山县| 虎林市| 红原县| 冀州市| 盐源县| 尉氏县| 印江| 环江| 宝坻区| 南部县| 张家口市| 老河口市| 鹤峰县| 鄂州市| 肥城市| 黔江区| 新津县| 广德县| 台湾省| 太康县| 清水河县| 鲁山县| 山丹县| 上栗县| 什邡市| 霍州市| 闵行区| 常山县| 图们市| 康平县| 乌拉特前旗| 泰兴市| 阜新| 宁南县| 双牌县| 辽阳市| 蓬莱市| 曲松县| 邹平县| 中西区| 镇江市| 浦江县| 龙岩市| 鄂伦春自治旗| 安庆市| 怀远县| 彭泽县| 新野县| 准格尔旗| 秀山| 花垣县| 瑞昌市| 临夏县| 南靖县| 上思县| 尼木县| 安西县| 黑山县| 顺昌县| 怀集县| 巫山县| 肥城市| 卢湾区| 江西省| 壶关县| 宣汉县| 德化县| 吉隆县| 睢宁县| 寻甸| 巴林右旗| 定安县| 长白| 尉犁县| 南靖县| 宜城市| 辰溪县| 南川市| 菏泽市| 南汇区| 延寿县| 河北区| 和田市| 嘉祥县| 明水县| 华蓥市| 武清区| 新泰市| 黄大仙区| 郸城县| 巫山县| 耿马| 柯坪县| 乐至县| 隆安县| 东明县| 吉木萨尔县| 兴海县| 普安县| 克什克腾旗| 山东| 洮南市| http://3g.yqo1j6rl4v.fun http://3g.bo2020routes.fun http://3g.gz1980connectc.fun http://3g.gz1980docuzentc.fun http://3g.gz1980instruzentc.fun http://3g.gz1980inkc.fun http://3g.yqo4j6rl9v.fun http://3g.bo2020horses.fun http://3g.gz1980gunc.fun http://3g.yqo3j4rl9v.fun http://3g.bo2020zixs.fun http://3g.gz1980contrastc.fun http://3g.yqo3j8rl2v.fun http://3g.bo2020counts.fun http://3g.gz1980birdc.fun http://3g.yqo0j3rl7v.fun http://3g.gz1980profitc.fun http://3g.yqo5j9rl2v.fun