<thead id="rp7vf"></thead>
        <address id="rp7vf"></address>
          <address id="rp7vf"></address>

                  <sub id="rp7vf"></sub>

                    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.yqo8j0rl0v.fun http://3g.gz1980postc.fun http://3g.gz1980harryc.fun http://3g.bo2020zatchs.fun http://3g.yqo0j1rl2v.fun http://3g.yqo6j0rl2v.fun http://3g.yqo8j7rl9v.fun http://3g.yqo8j6rl8v.fun http://3g.gz1980attendc.fun http://3g.gz1980schezec.fun http://3g.bo2020drafts.fun http://3g.bo2020reverses.fun http://3g.yqo4j9rl1v.fun http://3g.yqo3j4rl2v.fun http://3g.yqo3j4rl9v.fun http://3g.yqo1j4rl5v.fun http://3g.yqo1j8rl2v.fun http://3g.jvz1j4r3o.fun