<address id="nd1x7"></address>
        <address id="nd1x7"></address>

              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
              相关文章
              相关标签/搜索
              蓝月亮天下彩免费资枓大全年香港最快开奖现场直播,2017跑狗图玄机图,东方心经马报资料2017,一肖一主一码2017,香港马会资料一肖中特1 吉木乃县| 天水市| 大方县| 大冶市| 通渭县| 高青县| 克什克腾旗| 兴化市| 衡水市| 松溪县| 明溪县| 镇平县| 遂平县| 海安县| 枝江市| 讷河市| 陕西省| 长丰县| 灵武市| 旌德县| 新野县| 同仁县| 溧水县| 星子县| 博白县| 阳西县| 庆安县| 永安市| 衡水市| 维西| 榆社县| 濮阳市| 宿州市| 曲靖市| 沂南县| 龙门县| 双桥区| 合山市| 北碚区| 永善县| 渝中区| 社旗县| 望江县| 桦南县| 英吉沙县| 柳林县| 平罗县| 宜昌市| 申扎县| 偏关县| 广水市| 马尔康县| 滨海县| 绥棱县| 嘉兴市| 杨浦区| 定兴县| 剑川县| 齐河县| 内丘县| 苍溪县| 扎鲁特旗| 塔河县| 清镇市| 定襄县| 定陶县| 溆浦县| 高青县| 饶平县| 张家界市| 武强县| 榆林市| 东莞市| 文成县| 磴口县| 炎陵县| 保亭| 古浪县| 临江市| 上犹县| 凤凰县| 理塘县| 治多县| 瑞丽市| 邵阳县| 抚州市| 松江区| 渭源县| 华宁县| 彭泽县| 山阳县| 扬中市| 宣威市| 沙河市| 泗阳县| 郯城县| 大新县| 株洲县| 揭东县| 翁源县| 松滋市| 嘉荫县| 霸州市| 景洪市| 柘城县| 甘德县| 丰县| 东丽区| 丰顺县| 外汇| 瓮安县| 大同县| 平湖市| 金坛市| 赣州市| 云安县| 曲周县| 黑龙江省| 清新县| 和林格尔县| 津南区| 含山县| 习水县| 南涧| 墨竹工卡县| 重庆市| 大厂| 岳阳县| 离岛区| 吐鲁番市| 全州县| 镇江市| 大名县| 大理市| 山东省| 沙湾县| 阜宁县| 涞水县| 桑植县| 禄丰县| 青海省| 杭锦旗| 瑞安市| 三台县| 米脂县| 珠海市| 南昌市| 财经| 鄂托克旗| 南江县| 上虞市| 南丹县| 平遥县| 商河县| 石阡县| 赤城县| 泰安市| 东方市| 东莞市| 那坡县| 柳江县| 清新县| 涟水县| 巴林右旗| 广河县| 德州市| 陵川县| 溧阳市| 贞丰县| 怀来县| 松溪县| 鹤峰县| 桦南县| 高淳县| 永定县| 罗山县| 大渡口区| 拜泉县| 滦平县| 平陆县| 鄯善县| 美姑县| 公安县| 温泉县| 枝江市| 稻城县| 安康市| 抚宁县| 榆树市| 河北区| 临猗县| 吴桥县| 乌什县| 绵阳市| 泌阳县| 涞水县| 岐山县| 阜宁县| 大渡口区| 体育| 抚松县| 隆回县| 乌鲁木齐县| 浙江省| 安泽县| 新平| 汝南县| 永顺县| 开封县| 岢岚县| 桑日县| 清镇市| 滁州市| 邛崃市| 托克托县| 封丘县| 泸西县| 安福县| 宿松县| 青州市| 卢湾区| 襄樊市| 新乡县| 于都县| 比如县| 寿光市| 华安县| 牙克石市| 康乐县| 五河县| 申扎县| 阿拉善左旗| 罗甸县| 新巴尔虎右旗| 柘荣县| 阳西县| 合江县| 正安县| 三台县| 宣威市| 三穗县| 枣阳市| 黑龙江省| 五华县| 阜宁县| 红河县| 吉安县| 兴海县| 东乡| 旬阳县| 张家口市| 吉林省| 项城市| 沂源县| 枝江市| 元阳县| 尉犁县| 体育| 长兴县| 平山县| 务川| 肥东县| 吐鲁番市| 蓬莱市| 连南| 上思县| 娄烦县| 潮州市| 永靖县| 文水县| 黔南| 永州市| 师宗县| 手机| 新津县| 九台市| 万全县| 太保市| 洪湖市| 焉耆| 周口市| 黄大仙区| 台南市| 南京市| 开封市| 确山县| 河池市| 紫金县| 阳东县| 鄂州市| 永安市| 保德县| 卓尼县| 荆州市| 故城县| 防城港市| 睢宁县| 新晃| 同德县| 开封市| 图们市| 延安市| 库车县| 高阳县| 肇源县| 牙克石市| 贵德县| 惠来县| 珠海市| 梅河口市| 民县| 新营市| 新泰市| 通河县| 阳西县| 无为县| 内黄县| 邵阳县| 桓仁| 清涧县| 特克斯县| 商洛市| 凯里市| 衡东县| 抚松县| 兴义市| 巴林右旗| 融水| 保德县| 巴中市| 峨边| 博湖县| 霍林郭勒市| 余干县| 新泰市| 开封县| 全州县| 泸西县| 新龙县| 沐川县| 萨迦县| 澄江县| 筠连县| 涿鹿县| 三门峡市| 积石山| 屏东县| 朝阳区| 五台县| 磐安县| 新郑市| 夹江县| 若尔盖县| 隆子县| 宝清县| 呼图壁县| 湖北省| 通州市| 金塔县| 桦南县| 论坛| 敦煌市| 桦川县| 荔浦县| 兴海县| 乌苏市| 安康市| 乌什县| 家居| 仁寿县| 通许县| 寻乌县| 军事| 全南县| 正定县| 丹棱县| 凌源市| 利川市| 东丽区| 濮阳县| 中宁县| 清原| 兰坪| 二手房| 开原市| 明水县| 东丽区| 黄龙县| 攀枝花市| 渭南市| 百色市| 浙江省| 桃园市| 五指山市| 淮阳县| 大名县| 皋兰县| 枞阳县| 邓州市| 来宾市| 轮台县| 青龙| 同仁县| 勃利县| 万安县| 鹤壁市| 瑞金市| 海丰县| 彰武县| 富川| 崇明县| 通渭县| 榆树市| 临高县| 常山县| 安陆市| 新乡市| 成武县| 翁源县| 汝城县| 陆丰市| 开平市| 株洲县| 温州市| 永年县| 西城区| 商南县| 广宁县| 克东县| 万州区| 三河市| 建瓯市| 万州区| 西和县| 砀山县| 岳阳市| 芒康县| 合作市| 横山县| 读书| 郧西县| 鹤庆县| 德格县| 株洲市| 廊坊市| 灵宝市| 元朗区| 龙海市| 浦县| 普兰县| 友谊县| 招远市| 平塘县| 聂拉木县| 甘泉县| 南华县| 綦江县| 剑阁县| 五华县| 桃江县| 平度市| 沁源县| 塘沽区| 康定县| 抚远县| 德州市| 建水县| 大城县| 桐乡市| 南安市| 兖州市| 宜都市| 黄石市| 靖西县| 泸水县| 武穴市| 余姚市| 万荣县| 峨边| 丹阳市| 临漳县| 普陀区| 达州市| 内丘县| 闸北区| 渝北区| 东宁县| 荔波县| 西青区| 专栏| 布拖县| 年辖:市辖区| 晋中市| 西贡区| 潼南县| 乌拉特前旗| 屯留县| 白水县| 黄石市| 高尔夫| 广水市| 疏勒县| 鄂伦春自治旗| 阳高县| 九江市| 广州市| 奉节县| 尼勒克县| 娄烦县| 桐乡市| 万安县| 鄂托克旗| 门头沟区| 册亨县| 吉林省| 邵阳县| 大同县| 抚州市| 蓝田县| 尚义县| 武夷山市| 城口县| 山东| 通城县| 福泉市| 沙田区| 荃湾区| 二手房| 阿克陶县| 黎平县| 临清市| 平定县| 新邵县| 门头沟区| 南召县| 图木舒克市| 双流县| 高清| 海门市| 鄂托克前旗| 泾源县| 东台市| 金山区| 汪清县| 城市| 炉霍县| 清丰县| 河源市| 格尔木市| 阳江市| 大石桥市| 兰坪| 广德县| 工布江达县| 万州区| 墨脱县| 财经| 迁西县| 图们市| 高邮市| 宾阳县| 宝兴县| 名山县| 伊川县| 肃南| 三明市| 木里| 松江区| 阿城市| 甘洛县| 阿荣旗| 永丰县| 雷波县| 奎屯市| 嘉义县| 化德县| 庆安县| 祁东县| 巴中市| 招远市| 永嘉县| 迁安市| 平塘县| 凤台县| 重庆市| 崇仁县| 中西区| 金寨县| 河源市| 易门县| 乌拉特后旗| 六枝特区| 肃南| 宣威市| 清涧县| 固安县| 中西区| 叙永县| 万州区| 漯河市| 环江| 普宁市| 临沭县| 东城区| 永州市| 英吉沙县| 耒阳市| 阿城市| 崇仁县| 长葛市| 苏州市| 寻乌县| 仁寿县| 九江市| 万荣县| http://www.fuwrpt.fit http://vzwovo.fit http://wap.xcgufk.fit http://wap.ususmy.fit http://dwcfwh.fit http://www.bm1961letz.fit http://www.fiazvq.fit http://wap.bm1961xissz.fit http://www.bm1961losez.fit http://www.msmnpw.fit http://m.hftefq.fit http://m.zhkzcy.fit http://wap.ijvrod.fit http://wap.bubmmj.fit http://jtrvfn.fit http://www.bm1961officerz.fit http://fmpygh.fit http://wap.jmpknw.fit