二维整数数组中最大矩形子数组的和
一、作业要求:
1,以指定格式的文本文件形式输入数组。
2,数组由一维变为二维。
3,熟练使用git常用命令将作业签入代码版本控制平台。
4,给出单元测试/代码覆盖率的最终覆盖率的报告,撰写博客。
二、求最大矩形子数组的和
初始数据:

题目要求:
二维数组的子数组必须是矩形的,求出最大的矩形子数组之和,显示矩形的长宽和位置信息
例:

解决思路:
先找出所有的矩形块,计算其结果存储在列表中,再找出最大的结果
实现代码:
# 读取文件内容
def readFile(path):
# 读取文件
with open(path) as f:
lines = f.readlines()
return lines
# 将读取到的内容转换成二维列表
def createList(lines):
resultList = []
row = int(lines[0])
for i in range(2, 1 + row):
resultList.append(lines[i][:-1].split(','))
resultList.append(lines[-1].split(','))
return resultList
# 找出所有矩形子数组,并计算出子数组的结果,记录矩形的长宽及位置信息
def addresult(lists):
global ResultList
for i in range(1, len(lists[0]) + 1): # 控制矩形的长10
for j in range(1, len(lists) + 1): # 控制矩形的宽4
for k in range(0, len(lists) - j + 1): # 控制矩形的起始行
for m in range(0, len(lists[0]) - i + 1): # 控制矩形的起始列
Rectanglesum = 0
for n in range(k, k + j):
for o in range(m, m + i):
Rectanglesum = Rectanglesum + int(lists[n][o])
ResultList.append(
[Rectanglesum, str('矩形的长:' + str(i)), str('矩形的宽' + str(j)), str('矩形的起始行' + str(k + 1)),
str('矩形的起始列' + str(m + 1)), str('矩形的结束行' + str(k + j)), str('矩形的结束列' + str(m + i))])
return ResultList
# 找出和最大的矩形子数组
def findMax(lists):
maxlistsum = -99999
maxlist = []
for i in lists:
if i[0] > maxlistsum:
maxlistsum = i[0]
maxlist.clear()
maxlist.append(i)
return maxlist
def main(filepath):
global ResultList
ResultList = []
# 读取文件
dateLines = readFile(filepath)
# 创建二维列表
erweiList = createList(dateLines)
# 获取矩形数组结果集
result = addresult(erweiList)
# print(ResultList)
# 找出最大子数组
return findMax(result)
if __name__ == '__main__':
# 定义全局变量
ResultList = []
编写测试类:
import unittest
from 大三下学期Python.Rectangle import main
class Test(unittest.TestCase):
def test_main1(self):
self.assertEqual(main('list.txt'), [[964, '矩形的长:5', '矩形的宽3', '矩形的起始行3', '矩形的起始列4', '矩形的结束行5', '矩形的结束列8']])
def test_main2(self):
self.assertEqual(main('lianjie.txt'), [[383, '矩形的长:3', '矩形的宽1', '矩形的起始行5', '矩形的起始列1', '矩形的结束行5', '矩形的结束列3']])
测试结果:

代码覆盖率测试:
1、打开cmd安装coverage
pip install coverage
2、运行.py程序
在cmd命令提示符中输入
coverage run Rectangle.py
运行结果:

3、查看结果:
在cmd命令提示符中输入
coverage report
运行结果:

4、常看HTML版的运行报告:
在cmd命令提示符中输入
coverage html

运行完成后会在该目录下生成htmlcov文件夹,打开Rectangle_py.html文件


HTML版的覆盖率测试结果:

效能分析:
使用pycharm专业版的性能分析器进行效能分析,得到结果如图



浙公网安备 33010602011771号