• 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
    相关文章
    相关标签/搜索
    管家婆精选八码中特蓝月亮 临猗县| 张家界市| 定结县| 花莲县| 阿鲁科尔沁旗| 敖汉旗| 岳池县| 沙坪坝区| 呼图壁县| 惠州市| 宁乡县| 富锦市| 历史| 正定县| 龙泉市| 磐安县| 上栗县| 炎陵县| 安乡县| 永州市| 滨海县| 个旧市| 万安县| 肥乡县| 百色市| 邯郸市| 金溪县| 宕昌县| 罗田县| 正安县| 玛曲县| 宜兰市| 宿迁市| 鹤壁市| 荔浦县| 含山县| 剑川县| 古田县| 宜兰市| 洪雅县| 唐河县| 寻甸| 綦江县| 宣武区| 永新县| 溆浦县| 麻城市| 龙山县| 湛江市| 谷城县| 青州市| 金山区| 襄垣县| 兰州市| 友谊县| 理塘县| 凤台县| 兴仁县| 资讯| 南皮县| 海阳市| 新田县| 大竹县| 汨罗市| 洛宁县| 新巴尔虎左旗| 滕州市| 唐海县| 砚山县| 吉林省| 兴安县| 兰州市| 曲阜市| 东乡| 西乌| 罗江县| 贵定县| 大城县| 万载县| 鸡西市| 吉木萨尔县| 阿拉善盟| 增城市| 柳河县| 拉孜县| 南昌县| 新津县| 琼中| 潼关县| 睢宁县| 会昌县| 永仁县| 巴林左旗| 伊吾县| 敖汉旗| 九台市| 大化| 佳木斯市| 甘洛县| 建湖县| 潮州市| 托里县| 崇仁县| 乐陵市| 江北区| 永宁县| 屏东县| 清水河县| 华池县| 贵阳市| 东明县| 沁水县| 仪陇县| 沭阳县| 淳化县| 梁山县| 银川市| 尚志市| 涪陵区| 柞水县| 双鸭山市| 偃师市| 祁东县| 吉首市| 宜黄县| 太康县| 桓台县| 建湖县| 青浦区| 克什克腾旗| 洮南市| 安西县| 绩溪县| 武城县| 麻江县| 曲周县| 象山县| 沙坪坝区| 通渭县| 察雅县| 习水县| 保康县| 徐汇区| 沿河| 涟水县| 仲巴县| 乐安县| 彰化县| 拉孜县| 缙云县| 油尖旺区| 宁乡县| 苍溪县| 香河县| 定州市| 吉木萨尔县| 湖州市| 含山县| 古田县| 山东| 淳安县| 井陉县| 普安县| 乡宁县| 汉中市| 盘山县| 弋阳县| 冕宁县| 玉树县| 准格尔旗| 浮梁县| 师宗县| 北宁市| 长泰县| 九江县| 长宁区| 花莲市| 镇康县| 韶山市| 乌兰察布市| 延边| 临猗县| 临沭县| 会东县| 黎平县| 平昌县| 临武县| 泰州市| 安新县| 翼城县| 白银市| 旬阳县| 苍溪县| 高淳县| 龙陵县| 孝义市| 临沭县| 拉萨市| 句容市| 张家界市| 临武县| 南丹县| 阿合奇县| 南华县| 延川县| 乌兰县| 上杭县| 洛隆县| 沛县| 长葛市| 玛多县| 乌兰浩特市| 凌源市| 襄城县| 双流县| 秦安县| 资讯| 陇南市| 秀山| 镇安县| 都江堰市| 罗定市| 琼海市| 南靖县| 台东市| 太保市| 湖北省| 社会| 辛集市| 枝江市| 都江堰市| 麦盖提县| 来安县| 永州市| 宜丰县| 乐平市| 常熟市| 吴旗县| 乌恰县| 安岳县| 遂昌县| 杂多县| 胶南市| 黄大仙区| 阜宁县| 胶州市| 澄迈县| 甘孜| 子洲县| 维西| 康定县| 南川市| 天长市| 嘉义市| 永川市| 北安市| 渭源县| 洛宁县| 鞍山市| 桂林市| 霍城县| 方山县| 海阳市| 襄城县| 梅州市| 旺苍县| 同心县| 屯门区| 三原县| 锦屏县| 应城市| 望奎县| 深泽县| 大荔县| 金寨县| 贵州省| 晋中市| 连州市| 泽库县| 固镇县| 县级市| 临西县| 铜山县| 抚顺县| 乌兰察布市| 金华市| 车致| 枞阳县| 阿拉善左旗| 仁寿县| 铁岭市| 荣昌县| 时尚| 丰镇市| 岑巩县| 呼伦贝尔市| 双流县| 易门县| 金坛市| 建宁县| 潞城市| 连山| 巨野县| 吉林市| 永宁县| 祁阳县| 呼和浩特市| 多伦县| 汉寿县| 府谷县| 琼中| 固阳县| 岢岚县| 余干县| 谷城县| 龙门县| 泸州市| 上思县| 栾川县| 开化县| 图木舒克市| 诸暨市| 山丹县| 进贤县| 日喀则市| 宜丰县| 麟游县| 沿河| http://3g.gz1980blockc.fun http://3g.jvz1j4r8o.fun http://3g.gz1980stringc.fun http://3g.gz1980shiftc.fun http://3g.gz1980addressc.fun http://3g.yqo8j8rl0v.fun http://3g.bo2020sets.fun http://3g.gz1980lizitc.fun http://3g.gz1980bodyc.fun http://3g.yqo1j5rl9v.fun http://3g.bo2020bounds.fun http://3g.gz1980centrec.fun http://3g.yqo1j8rl5v.fun http://3g.gz1980talkc.fun http://3g.yqo7j3rl2v.fun http://3g.bo2020farzs.fun http://3g.gz1980edgec.fun http://3g.bo2020tops.fun