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大全 余姚市| 兴和县| 平利县| 界首市| 彭山县| 英吉沙县| 兴安县| 金堂县| 河源市| 都昌县| 文化| 南乐县| 东辽县| 什邡市| 临汾市| 四会市| 扶风县| 洛宁县| 越西县| 华阴市| 嘉义县| 博客| 闽清县| 稷山县| 姜堰市| 宜兴市| 略阳县| 蓝山县| 都安| 石屏县| 鄂托克前旗| 安宁市| 博湖县| 西乡县| 共和县| 扬中市| 怀柔区| 陈巴尔虎旗| 江源县| 寿阳县| 麟游县| 赤壁市| 河曲县| 阳江市| 灵武市| 石家庄市| 隆尧县| 玉门市| 阿坝| 资讯| 若尔盖县| 高台县| 安丘市| 兴宁市| 林州市| 桐乡市| 敦煌市| 景德镇市| 琼海市| 安义县| 桑日县| 万年县| 双牌县| 西平县| 灌阳县| 罗山县| 沙坪坝区| 紫金县| 富蕴县| 合作市| 遂溪县| 浙江省| 云林县| 广东省| 黄骅市| 浦城县| 肇庆市| 罗平县| 神木县| 满洲里市| 金门县| 灌阳县| 儋州市| 大悟县| 东平县| 鲜城| 牡丹江市| 礼泉县| 湖南省| 黄大仙区| 巫山县| 隆昌县| 阜康市| 静乐县| 光泽县| 锡林浩特市| 呈贡县| 武功县| 当雄县| 正阳县| 保靖县| 元氏县| 武功县| 绥化市| 库尔勒市| 洪雅县| 孟州市| 岫岩| 苗栗县| 海盐县| 吉安市| 深圳市| 汕头市| 丹江口市| 竹溪县| 栾川县| 遂平县| 黑河市| 大洼县| 武定县| 大悟县| 定边县| 邳州市| 灵川县| 海原县| 锡林浩特市| 道孚县| 色达县| 桃园市| 墨玉县| 潮州市| 黑山县| 姜堰市| 丽江市| 娄底市| 辛集市| 铅山县| 丹巴县| 沿河| 策勒县| 赤城县| 拜泉县| 滁州市| 乐陵市| 土默特左旗| 赤峰市| 邯郸县| 大关县| 吉安市| 沧州市| 宜州市| 育儿| 平陆县| 崇仁县| 海口市| 左贡县| 洛隆县| 彭水| 普格县| 南雄市| 建宁县| 太仓市| 临沭县| 江阴市| 祁连县| 峡江县| 昌宁县| 响水县| 彝良县| 宣武区| 虹口区| 邓州市| 阳山县| 布拖县| 钟山县| 新化县| 新乡县| 调兵山市| 湘西| 离岛区| 美姑县| 远安县| 昌平区| 湘阴县| 石楼县| 宿州市| 新丰县| 周至县| 彭水| 沙湾县| 岳普湖县| 台南县| 天津市| 措美县| 万山特区| 柘城县| 凤台县| 师宗县| 宝山区| 砚山县| 深州市| 齐河县| 西乡县| 根河市| 大同县| 吐鲁番市| 革吉县| 洛隆县| 新干县| 太保市| 仁怀市| 海门市| 武定县| 临海市| 江北区| 基隆市| 讷河市| 无棣县| 上蔡县| 河源市| 青神县| 康定县| 普格县| 防城港市| 开远市| 彭州市| 平武县| 五河县| 香格里拉县| 丹江口市| 墨江| 萍乡市| 德钦县| 阿尔山市| 夏津县| 汉寿县| 营山县| 班戈县| 涪陵区| 枝江市| 林州市| 鄂伦春自治旗| 兴安盟| 仁怀市| 景德镇市| 家居| 威海市| 礼泉县| 锡林浩特市| 宁夏| 库车县| 宜黄县| 潼关县| 贡觉县| 康乐县| 乐业县| 朝阳市| 玉门市| 济宁市| 徐水县| 枣阳市| 莫力| 锦州市| 年辖:市辖区| 潜山县| 益阳市| 泸定县| 吉隆县| 孟村| 资中县| 施甸县| 金门县| 凤山市| 商城县| 忻州市| 蓬安县| 成安县| 泗洪县| 炉霍县| 措勤县| 巴彦县| 瑞昌市| 博野县| 喜德县| 镇沅| 祥云县| 德庆县| 岳西县| 乌鲁木齐市| 潼关县| 沂源县| 清水县| 福泉市| 呼和浩特市| 三都| 黑山县| 芦山县| 承德市| 游戏| 堆龙德庆县| 芮城县| 东乌珠穆沁旗| 旌德县| 陈巴尔虎旗| 密山市| 湟中县| 古田县| 凉城县| 元朗区| 江陵县| 泾源县| 泰兴市| 安陆市| 绿春县| 普兰店市| 新余市| 库尔勒市| 唐海县| 兴和县| 垣曲县| 志丹县| 北海市| 庄河市| 金秀| 从化市| 阿勒泰市| 玉林市| 瑞昌市| http://3g.gz1980repairc.fun http://3g.gz1980googlec.fun http://3g.bo2020looks.fun http://3g.bo2020razs.fun http://3g.bo2020browns.fun http://3g.gz1980respectc.fun http://3g.gz1980includec.fun http://3g.yqo9j5rl5v.fun http://3g.bo2020rises.fun http://3g.gz1980trackc.fun http://3g.gz1980arzc.fun http://3g.bo2020processs.fun http://3g.gz1980queryc.fun http://3g.yqo1j7rl1v.fun http://3g.gz1980provisionc.fun http://3g.gz1980claizc.fun http://3g.jvz0j6r7o.fun http://3g.bo2020abuses.fun