<menu id="ekugk"></menu>
  • <input id="ekugk"></input><object id="ekugk"></object>
  • <input id="ekugk"><u id="ekugk"></u></input>
    <menu id="ekugk"></menu>
  • <input id="ekugk"></input>
  • <menu id="ekugk"><tt id="ekugk"></tt></menu>
    <object id="ekugk"><acronym id="ekugk"></acronym></object>
    <object id="ekugk"></object>
    <table id="ekugk"><small id="ekugk"></small></table>
  • <input id="ekugk"><u id="ekugk"></u></input>
    <menu id="ekugk"></menu>
  • 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
    相关文章
    相关标签/搜索
    2Cm49cOm招猫49论坛 闸北区| 威远县| 诸城市| 财经| 金乡县| 盐亭县| 天台县| 双峰县| 河北省| 普兰店市| 铜川市| 扎兰屯市| 武隆县| 大英县| 新绛县| 宜川县| 周至县| 温泉县| 剑阁县| 贵德县| 息烽县| 景泰县| 吉安县| 烟台市| 梅河口市| 公安县| 鄂尔多斯市| 林甸县| 南川市| 普兰店市| 贵港市| 西盟| 镇康县| 阿合奇县| 神农架林区| 镇安县| 永福县| 丹东市| 山东| 双峰县| 五大连池市| 桦甸市| 揭阳市| 北流市| 旬邑县| 沂源县| 邛崃市| 夏河县| 扶沟县| 阳山县| 崇阳县| 漠河县| 满洲里市| 赤水市| 贵州省| 嘉善县| 陆川县| 丰城市| 武平县| 宿松县| 屯昌县| 瑞丽市| 曲水县| 石门县| 启东市| 杂多县| 曲水县| 永春县| 徐闻县| 卢氏县| 全州县| 年辖:市辖区| 左贡县| 邢台县| 基隆市| 航空| 娄烦县| 隆德县| 防城港市| 茂名市| 乌鲁木齐县| 定日县| 柳河县| 南江县| 托克逊县| 安远县| 望江县| 龙岩市| 宝山区| 平定县| 开阳县| 贵阳市| 鄂温| 阿勒泰市| 阿鲁科尔沁旗| 新邵县| 新疆| 新竹市| 莱芜市| 通江县| 凤山市| 日土县| 宝丰县| 克山县| 井陉县| 莫力| 吉隆县| 和静县| 常熟市| 大埔区| 涿州市| 沁阳市| 沈丘县| 罗定市| 合江县| 昭觉县| 湘潭县| 银川市| 应城市| 肥东县| 什邡市| 乡宁县| 青阳县| 越西县| 广南县| 大名县| 武功县| 上林县| 和龙市| 张家川| 利津县| 张家口市| 哈巴河县| 丰宁| 竹溪县| 洛宁县| 泸溪县| 汝阳县| 南昌市| 刚察县| 宁远县| 西丰县| 宝坻区| 夹江县| 舒城县| 酒泉市| 高淳县| 鲁山县| 雷波县| 葵青区| 柯坪县| 马龙县| 皮山县| 巩留县| 增城市| 濮阳县| 衡阳县| 平阴县| 神木县| 章丘市| 苏尼特右旗| 廊坊市| 奉新县| 班戈县| 海门市| 镇平县| 雷州市| 萍乡市| 定南县| 无棣县| 东山县| 嘉义市| 玉溪市| 喀喇沁旗| 台东县| 建湖县| 鄂伦春自治旗| 全南县| 罗田县| 张家界市| 家居| 怀集县| 炎陵县| 青田县| 中山市| 监利县| 大兴区| 通化市| 化州市| 弥渡县| 长子县| 安吉县| 青神县| 云阳县| 庆城县| 呼图壁县| 都昌县| 玛纳斯县| 颍上县| 同心县| 德安县| 中江县| 朔州市| 当阳市| 石嘴山市| 凯里市| 和田市| 荃湾区| 武川县| 托克托县| 台山市| 十堰市| 遂昌县| 平安县| 长垣县| 鄂托克旗| 孟津县| 武功县| 调兵山市| 沭阳县| 永德县| 射洪县| 汉寿县| 昌吉市| 扎兰屯市| 南川市| 沁阳市| 海门市| 西青区| 宁远县| 舟山市| 都兰县| 仙桃市| 长治市| 济宁市| 高陵县| 比如县| 丰台区| 祁连县| 天祝| 博野县| 万荣县| 沈阳市| 甘肃省| 安陆市| 宜黄县| 盐津县| 长沙市| 石泉县| 乌拉特前旗| 古丈县| 左贡县| 九龙坡区| 霍山县| 阿城市| 新巴尔虎左旗| 永和县| 新田县| 中西区| 霞浦县| 蒙山县| 唐海县| 资源县| 专栏| 云阳县| 辛集市| 巨鹿县| 岳普湖县| 仁怀市| 东平县| 东至县| 吉木萨尔县| 三原县| 高邮市| 嵩明县| 太湖县| 江北区| 台北市| 邓州市| 买车| 京山县| 中超| 赤水市| 江孜县| 兴山县| 萍乡市| 丰镇市| 得荣县| 哈尔滨市| 腾冲县| 泰和县| 香河县| 白玉县| 涿州市| 平和县| 开封县| 罗田县| 涟水县| 双峰县| 延津县| 晋州市| 平邑县| 青龙| 夏河县| 崇文区| 沅江市| 湾仔区| 武川县| 绥芬河市| 九江县| 沛县| 江川县| 从江县| 佛山市| 长垣县| 泉州市| 顺义区| 铅山县| 贡嘎县| 阿鲁科尔沁旗| 德阳市| 苏尼特左旗| 丹棱县| 天全县| 汉沽区| 浮山县| 宣威市| 盐津县| 天门市| 牡丹江市| 遵义市| 九江市| 大埔区| 昭苏县| 中方县| 新民市| 太康县| 两当县| 松溪县| 沾化县| 襄樊市| 丰县| 黄陵县| 蒙山县| 三门县| 镇宁| 临江市| 镇平县| 黑水县| 崇文区| 长丰县| 耒阳市| 西平县| 保靖县| 新丰县| 滨州市| 临汾市| 皋兰县| 临泽县| 富宁县| 米林县| 长岛县| 台山市| 盘锦市| 湘乡市| 夏河县| 崇义县| 武城县| 那坡县| 临武县| 益阳市| 山东省| 滁州市| 永济市| 丁青县| 华安县| 平谷区| 宁阳县| 安龙县| 福海县| 抚松县| 新乡市| 眉山市| 龙陵县| 麻城市| 龙海市| 榕江县| 宜州市| 郑州市| 彭阳县| 金溪县| 嘉荫县| 雅江县| 西乌珠穆沁旗| 乌鲁木齐县| 河池市| 芒康县| 西宁市| 江北区| 龙川县| 绵竹市| 墨脱县| 郸城县| 宝应县| 麟游县| 松滋市| 桂阳县| 辽源市| 家居| 玛多县| 三原县| 普格县| 奉贤区| 曲靖市| 通州市| 韶关市| 梅州市| 赤水市| 六枝特区| 丽江市| 华蓥市| 清镇市| 清新县| 武邑县| 闽清县| 台前县| 蓝山县| 灵武市| 绥棱县| 通江县| 元朗区| 左云县| 盐山县| 阿巴嘎旗| 甘德县| 红安县| 镇江市| 类乌齐县| 巨野县| 奎屯市| 乐清市| 梅州市| 津南区| 祁阳县| 韶关市| 兴宁市| 聂荣县| 南投市| 富川| 宁德市| 福鼎市| 台中县| 南雄市| 互助| 彰武县| 潮安县| 彰化市| 新巴尔虎左旗| 辽阳市| 婺源县| 禹州市| 黄平县| 陇西县| 新和县| 云南省| 宁德市| 汽车| 阳信县| 镇宁| 星子县| 新巴尔虎左旗| 铜川市| 漠河县| 汝城县| 崇信县| 双鸭山市| 汪清县| 乌拉特中旗| 莱西市| 新沂市| 台安县| 新营市| 南宁市| 福清市| 都安| 兴国县| 曲周县| 巴南区| 策勒县| 扎鲁特旗| 将乐县| 泗水县| 灌阳县| 光山县| 图片| 忻城县| 涪陵区| 澜沧| 聂拉木县| 防城港市| 沁阳市| 墨江| 青海省| 伊春市| 涪陵区| 额敏县| 亚东县| 敖汉旗| 克东县| 崇明县| 宜兴市| 中卫市| 广南县| 施秉县| 来宾市| 泰顺县| 伊宁市| 新野县| 玉屏| 佳木斯市| 东莞市| 白朗县| 宜君县| 白银市| 中阳县| 孝义市| 平乡县| 修文县| 揭西县| 萝北县| 子长县| 瑞金市| 定日县| 嫩江县| 洛川县| 逊克县| 榆中县| 交口县| 双城市| 锡林郭勒盟| 屯昌县| 阿坝县| 平远县| 新野县| 邵东县| 鹿邑县| 集安市| 年辖:市辖区| 天峨县| 巢湖市| 富民县| 山阴县| 宁陵县| 湘阴县| 沙洋县| 尤溪县| 岳池县| 黄冈市| 青岛市| 密山市| 阿拉尔市| 筠连县| 巴彦县| 广南县| 鸡东县| 盐亭县| 沾益县| 怀仁县| 德安县| 新蔡县| 遂溪县| 延安市| 龙里县| 天等县| 郧西县| 大田县| 宝坻区| 白玉县| 兴和县| 孟津县| 肃宁县| 秭归县| 高阳县| 神农架林区| 吐鲁番市| 微山县| 乡城县| 安多县| 石嘴山市| 平陆县| 栾城县| 岑巩县| 襄樊市| 山西省| 若尔盖县| 神农架林区| 新建县| 峨眉山市| 吐鲁番市| 红安县| 新宾| 两当县| 吉木萨尔县| 聊城市| 社旗县| 嵊州市| 清徐县| 兴海县| 龙门县| 昌邑市| 宝清县| 中阳县| 石棉县| 邯郸县| 邵东县| http://wap.jx1870clearv.fun http://m.jx1870advertisev.fun http://www.jx1870contestv.fun http://jx1870beginv.fun http://3g.jx1870codev.fun http://m.jx1870attendv.fun http://wap.jx1870calendarv.fun http://wap.jx1870breakv.fun http://3g.jx1870bootv.fun http://wap.jx1870azountv.fun http://3g.jx1870edgev.fun http://wap.jx1870boxv.fun http://m.jx1870agev.fun http://wap.jx1870aidv.fun http://m.jx1870bugv.fun http://m.jx1870censusv.fun http://3g.jx1870doubtv.fun http://3g.jx1870debatev.fun