• 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
    相关文章
    相关标签/搜索
    四肖中特期期準王中王资料大全枓大全app下载-王中王资料大全枓大全开奖手机版 蛟河市| 平乡县| 临湘市| 辽中县| 宜昌市| 嘉禾县| 常宁市| 东方市| 临朐县| 阳谷县| 额尔古纳市| 凤山县| 五华县| 丹棱县| 巴林左旗| 炎陵县| 凤冈县| 广河县| 北碚区| 望江县| 广东省| 延津县| 罗源县| 天柱县| 钟祥市| 惠安县| 延川县| 敦化市| 邹平县| 合山市| 息烽县| 扬中市| 百色市| 岑巩县| 施甸县| 堆龙德庆县| 策勒县| 龙陵县| 民权县| 新绛县| 鹤壁市| 鹤庆县| 茂名市| 勃利县| 平乐县| 元谋县| 新营市| 商都县| 沭阳县| 鄢陵县| 肥东县| 乐清市| 南安市| 枣庄市| 神农架林区| 北海市| 乌兰察布市| 武威市| 漳浦县| 都兰县| 乐安县| 南雄市| 城口县| 肃北| 图片| 克东县| 寻甸| 溧阳市| 城步| 利川市| 西乌珠穆沁旗| 阿荣旗| 亚东县| 大名县| 延津县| 和田县| 恭城| 南江县| 昂仁县| 荔波县| 桂林市| 钟山县| 文登市| 玉山县| 霍林郭勒市| 高邮市| 景谷| 五峰| 湾仔区| 四会市| 类乌齐县| 灵石县| 望奎县| 张家口市| 通化市| 交口县| 昌吉市| 且末县| 德江县| 顺昌县| 称多县| 沭阳县| 文昌市| 方山县| 巴中市| 阜康市| 石柱| 七台河市| 徐州市| 霞浦县| 吉安县| 吉林省| 开化县| 元氏县| 维西| 昌乐县| 烟台市| 木里| 河北省| 合江县| 新龙县| 夏河县| 石柱| 会东县| 九寨沟县| 石河子市| 华容县| 锡林郭勒盟| 孝义市| 延川县| 繁昌县| 富民县| 大洼县| 汝城县| 乌兰县| 威海市| 新安县| 桓台县| 慈利县| 济宁市| 乐平市| 阿拉善右旗| 永安市| 巴林左旗| 贺兰县| 平阴县| 陵水| 甘南县| 大方县| 南开区| 昆山市| 罗田县| 弥渡县| 军事| 久治县| 阳曲县| 木里| 屯昌县| 贵港市| 景德镇市| 邢台市| 奇台县| 德保县| 乌兰浩特市| 白水县| 溆浦县| 洛浦县| 敦化市| 叙永县| 嘉黎县| 巩留县| 满城县| 齐齐哈尔市| 青川县| 内江市| 重庆市| 湛江市| 新昌县| 贵州省| 泰兴市| 阳东县| 西乌珠穆沁旗| 东乡族自治县| 鱼台县| 广安市| 太保市| 宝坻区| 娄烦县| 普陀区| 建平县| 陈巴尔虎旗| 佳木斯市| 连南| 阳信县| 贺兰县| 古蔺县| 拜泉县| 泸西县| 新和县| 克什克腾旗| 泸西县| 天柱县| 庆城县| 伽师县| 马边| 凭祥市| 阳谷县| 平山县| 乐业县| 卓资县| 衡南县| 卢龙县| 邓州市| 西乌| 普兰店市| 信阳市| 宝兴县| 体育| 巨鹿县| 鹤山市| 华宁县| 斗六市| 叶城县| 天等县| 开化县| 山西省| 房产| 固镇县| 云林县| 星子县| 峨眉山市| 朝阳区| 遂溪县| 六盘水市| 千阳县| 河北省| 城市| 钦州市| 胶州市| 漠河县| 凤山市| 乌鲁木齐市| 承德市| 神木县| 舟山市| 静宁县| 张家港市| 兴宁市| 凯里市| 沙雅县| 江华| 印江| 佛坪县| 那曲县| 昆明市| 治县。| 新疆| 新河县| 德阳市| 凤台县| 石渠县| 深水埗区| 六安市| 郁南县| 东兴市| 奉节县| 罗江县| 冷水江市| 石门县| 衡东县| 洛隆县| 丽江市| 武城县| 永清县| 红原县| 通州市| 罗甸县| 星座| 孟州市| 剑阁县| 海伦市| 光泽县| 孟州市| 祁东县| 宜城市| 桐城市| 宁河县| 延庆县| 祁连县| 镇雄县| 宝丰县| 榆中县| 临颍县| 托里县| 普兰店市| 邹城市| 略阳县| 徐水县| 南皮县| 大名县| 博野县| 禄劝| 霍州市| 司法| 犍为县| 张家界市| 北安市| 乐山市| 陵水| 安溪县| 南溪县| 海城市| 横峰县| 新野县| 韶山市| 泸定县| 台中县| 彩票| 卓尼县| 营山县| 崇阳县| 任丘市| 潜江市| 科技| 平顶山市| 麦盖提县| 永顺县| 永昌县| http://3g.yqo9j1rl7v.fun http://3g.gz1980beginc.fun http://3g.bo2020uses.fun http://3g.bo2020glasss.fun http://3g.gz1980runc.fun http://3g.yqo5j9rl6v.fun http://3g.bo2020passs.fun http://3g.gz1980szoothc.fun http://3g.gz1980cupc.fun http://3g.yqo0j5rl6v.fun http://3g.bo2020agrees.fun http://3g.gz1980buttonc.fun http://3g.yqo4j3rl7v.fun http://3g.bo2020checks.fun http://3g.yqo9j0rl5v.fun http://3g.bo2020inputs.fun http://3g.gz1980castc.fun http://3g.bo2020quotes.fun