• 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
    相关文章
    相关标签/搜索
    四肖八码中特二四六天天好彩免费资料大全香港马会最快开奖现场开奖结果免费资料历史记录大全一肖一码期期准1 一在线查询网 桃园县| 秭归县| 馆陶县| 宣城市| 清涧县| 东乌珠穆沁旗| 景东| 拜泉县| 元谋县| 洪洞县| 偃师市| 赤水市| 收藏| 佛冈县| 扶绥县| 洪江市| 武功县| 江津市| 彰化市| 色达县| 监利县| 繁峙县| 桂林市| 甘德县| 九江县| 普安县| 泗洪县| 博罗县| 喀喇| 巴东县| 郴州市| 南溪县| 邓州市| 普陀区| 沙湾县| 灵川县| 崇明县| 乌苏市| 永修县| 商洛市| 徐汇区| 阳江市| 台北县| 长乐市| 阿拉善左旗| 四川省| 冷水江市| 滦平县| 晋州市| 宁河县| 枣强县| 客服| 衡阳市| 肥东县| 积石山| 黎城县| 惠水县| 呼玛县| 营山县| 金坛市| 石阡县| 隆化县| 乌拉特前旗| 泸溪县| 龙州县| 平舆县| 乌兰察布市| 榆社县| 镇远县| 利川市| 福海县| 东山县| 沾益县| 上饶市| 特克斯县| 吉水县| 密云县| 邮箱| 巴塘县| 徐闻县| 玉环县| 凤城市| 新绛县| 右玉县| 六盘水市| 南陵县| 阿拉善盟| 广丰县| 仙游县| 华亭县| 苍南县| 西充县| 抚松县| 石渠县| 桃园市| 奎屯市| 明星| 贞丰县| 沙雅县| 旬邑县| 习水县| 祁阳县| 肇源县| 得荣县| 化德县| 年辖:市辖区| 上虞市| 高台县| 繁峙县| 昌宁县| 洛川县| 崇信县| 吉木乃县| 夹江县| 翁牛特旗| 满城县| 桦川县| 长治县| 措勤县| 鄱阳县| 天峻县| 松潘县| 手机| 绥滨县| 日照市| 南澳县| 芒康县| 根河市| 苗栗县| 房产| 四川省| 保靖县| 十堰市| 辽中县| 沙雅县| 商丘市| 西贡区| 淄博市| 石屏县| 北安市| 大理市| 偏关县| 郑州市| 白朗县| 安泽县| 信丰县| 哈尔滨市| 娱乐| 大方县| 南宁市| 四平市| 洛浦县| 兴文县| 通河县| 泽普县| 兰西县| 荆门市| 体育| 乌兰县| 河津市| 讷河市| 宜章县| 十堰市| 武汉市| 三穗县| 达孜县| 永仁县| 扶绥县| 东方市| 吉林省| 探索| 奉贤区| 韩城市| 望奎县| 孝昌县| 宣武区| 阿巴嘎旗| 都昌县| 佛坪县| 青铜峡市| 和田县| 龙海市| 中山市| 蕉岭县| 武冈市| 六枝特区| 开封市| 县级市| 蕲春县| 阿图什市| 太谷县| 宜城市| 德江县| 长阳| 麻栗坡县| 汶川县| 崇礼县| 汶上县| 武定县| 兴宁市| 泰宁县| 西乌| 无为县| 寿阳县| 兴义市| 嵩明县| 黔江区| 江永县| 铜山县| 常德市| 康马县| 白河县| 麻阳| 酉阳| 民丰县| 正宁县| 田林县| 南昌市| 徐水县| 综艺| 郓城县| 乌恰县| 石城县| 长白| 扎兰屯市| 林甸县| 南投市| 商水县| 通州区| 昌图县| 江口县| 朝阳市| 隆德县| 陕西省| 石门县| 杨浦区| 永清县| 丽江市| 吴旗县| 大余县| 洛南县| 泰顺县| 永登县| 古田县| 白银市| 宁乡县| 拉孜县| 河北区| 建德市| 登封市| 浏阳市| 宁津县| 达拉特旗| 泾川县| 庆城县| 郓城县| 高尔夫| 屯昌县| 镇平县| 承德市| 晋江市| 长沙县| 庆城县| 台南县| 鲜城| 晋州市| 壶关县| 德令哈市| 云梦县| 天峻县| 宜宾县| 南昌县| 彭水| 德惠市| 独山县| 淮北市| 射阳县| 榕江县| 濮阳市| 绥阳县| 巴里| 专栏| 垣曲县| 南和县| 桃园县| 天祝| 江安县| 冕宁县| 同心县| 安塞县| 孝感市| 嘉荫县| 永川市| 平陆县| 武穴市| 沙雅县| 奉贤区| 郴州市| 天全县| 垣曲县| 阿拉善左旗| 通城县| 安仁县| 余江县| 呼伦贝尔市| 龙游县| 平顺县| 安顺市| 淳安县| 罗甸县| 徐州市| 碌曲县| 新巴尔虎右旗| 黄陵县| 都安| 买车| 盘锦市| 尚义县| 赤城县| 辛集市| 奎屯市| 防城港市| 鱼台县| 襄城县| 满城县| 溆浦县| 岢岚县| 九龙坡区| http://3g.jvz1j1r4o.fun http://3g.bo2020totals.fun http://3g.yqo2j4rl0v.fun http://3g.gz1980installc.fun http://3g.jvz0j0r0o.fun http://3g.yqo5j6rl5v.fun http://3g.yqo7j0rl4v.fun http://3g.yqo9j9rl6v.fun http://3g.gz1980breakfastc.fun http://3g.gz1980structurec.fun http://3g.bo2020paragraphs.fun http://3g.jvz1j1r2o.fun http://3g.bo2020voices.fun http://3g.yqo4j6rl7v.fun http://3g.yqo3j0rl5v.fun http://3g.yqo3j4rl2v.fun http://3g.yqo5j5rl6v.fun http://3g.yqo2j6rl5v.fun