鱼C论坛

 找回密码
 立即注册
查看: 1007|回复: 1

[已解决]求最大矩形

[复制链接]
发表于 2019-11-19 16:48:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。

输入:
[
  ["1","0","1","0","0"],
  ["1","0","1","1","1"],
  ["1","1","1","1","1"],
  ["1","0","0","1","0"]
]
输出: 6


来源:力扣(LeetCode)链接:
最佳答案
2019-11-20 12:15:16
本帖最后由 阴阳神万物主 于 2019-11-20 17:05 编辑
仅包含 0 和 1 的

乱码咯,编辑一下吧,虽然能看懂……

解答:
  1. def solve(give)->int:
  2.     area = 0
  3.     a,b=0,0
  4.     height = len(give)
  5.     width = len(give[0])
  6.     for i in range(height):
  7.         bottom = height
  8.         for j in range(width):
  9.             if give[i][j] == '1':
  10.                 a += 1
  11.             else:
  12.                 a,b = 0,0
  13.             for q in range(i,bottom):
  14.                 if give[q][j] == '1':
  15.                     b += 1
  16.                     area = max(area,a*b)
  17.                     #print('调试\n\ti\tj\tq\ta\tb\tmul\tarea\n',i,j,q,a,b,a*b,area,sep='\t')
  18.                     if q == bottom-1:
  19.                         b = 0
  20.                         if not i:
  21.                             if area == height*width:
  22.                                 return area
  23.                 else:
  24.                     bottom = q
  25.                     b = 0
  26.             if j == width-1:
  27.                 a,b = 0,0
  28.     return area

  29. if __name__ == '__main__':
  30.     matrix = [
  31.   ["1","0","1","0","0"],
  32.   ["1","0","1","1","1"],
  33.   ["1","1","1","1","1"],
  34.   ["1","0","0","1","0"]
  35. ]
  36.     print('6 输出',solve(matrix))
  37.     test = [
  38. ['1','1'],
  39. ['1','1']
  40. ]
  41.     print('4 输出',solve(test))
复制代码
时间复杂度:O(height*width*height!)
不晓得能不能再优化
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-20 12:15:16 | 显示全部楼层    本楼为最佳答案   
本帖最后由 阴阳神万物主 于 2019-11-20 17:05 编辑
仅包含 0 和 1 的

乱码咯,编辑一下吧,虽然能看懂……

解答:
  1. def solve(give)->int:
  2.     area = 0
  3.     a,b=0,0
  4.     height = len(give)
  5.     width = len(give[0])
  6.     for i in range(height):
  7.         bottom = height
  8.         for j in range(width):
  9.             if give[i][j] == '1':
  10.                 a += 1
  11.             else:
  12.                 a,b = 0,0
  13.             for q in range(i,bottom):
  14.                 if give[q][j] == '1':
  15.                     b += 1
  16.                     area = max(area,a*b)
  17.                     #print('调试\n\ti\tj\tq\ta\tb\tmul\tarea\n',i,j,q,a,b,a*b,area,sep='\t')
  18.                     if q == bottom-1:
  19.                         b = 0
  20.                         if not i:
  21.                             if area == height*width:
  22.                                 return area
  23.                 else:
  24.                     bottom = q
  25.                     b = 0
  26.             if j == width-1:
  27.                 a,b = 0,0
  28.     return area

  29. if __name__ == '__main__':
  30.     matrix = [
  31.   ["1","0","1","0","0"],
  32.   ["1","0","1","1","1"],
  33.   ["1","1","1","1","1"],
  34.   ["1","0","0","1","0"]
  35. ]
  36.     print('6 输出',solve(matrix))
  37.     test = [
  38. ['1','1'],
  39. ['1','1']
  40. ]
  41.     print('4 输出',solve(test))
复制代码
时间复杂度:O(height*width*height!)
不晓得能不能再优化
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-18 10:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表