数组中最大的子数组之和
数组中最大的子数组之和
一、程序分析
初始数据:
-32, -10, 33, -23, 32, -12, 41, -12, 1, 3, 5, -98, 70, -21, 10, -9, 61
要求:
希望返回 3 种信息
最大子数组的和
最大子数组开始的下标
最大子数组结束的下标
二、解决思路:
使用Python语言进行编译,编写一个类文件,输入是一段数据,输出是一个列表,
里面放:1,最大子数组的和 2,最大子数组开始的下标 3,最大子数组结束的下标
代码部分:
1 class MaxNumber: 2 maxNumber = 0 3 startSite = "" 4 endSite = "" 5 string = "NULL" 6 List1 = [] 7 ResultList = [] 8 9 def __init__(self, strings): 10 self.string = strings 11 12 def CreateList(self): 13 strNum = "" 14 for i in self.string: 15 if ord(i) == ord(" "): 16 continue 17 if ord("9") >= ord(i) >= ord("0") or ord(i) == ord("-"): 18 strNum = strNum + i 19 else: 20 self.List1.append(int(strNum)) 21 strNum = "" 22 self.List1.append(int(strNum)) 23 24 def FindMaxNumber(self): 25 sumnum = 0 26 length = len(self.List1) 27 for i in range(2, length + 1): 28 for k in range(0, length - i + 1): 29 for j in range(i): 30 sumnum = sumnum + int(self.List1[k + j]) 31 self.List1.append([sumnum, k, k + i - 1]) 32 sumnum = 0 33 34 def format(self): 35 count = 0 36 for i in self.List1: 37 if isinstance(i, int): 38 self.List1[count] = [i, count, count] 39 count = count + 1 40 41 def ShowMax(self): 42 self.CreateList() 43 self.FindMaxNumber() 44 self.format() 45 for i in self.List1: 46 if i[0] >= self.maxNumber: 47 self.maxNumber = i[0] 48 self.startSite = i[1] 49 self.endSite = i[2] 50 self.ResultList.append(self.maxNumber) 51 self.ResultList.append(self.startSite) 52 self.ResultList.append(self.endSite) 53 return self.ResultList 54 55 56 if __name__ == '__main__': 57 # 定义变量 58 string = "-32, -10, 33, -23, 32, -12, 41, -12, 1, 3, 5, -98, 70, -21, 10, -9, 61" 59 # 实例化 60 maxnum = MaxNumber(string) 61 print(maxnum.ShowMax())
运行结果截图:
由输出结果可知:得到的最大子数组的和为111,最大子数组开始的下标为12,最大子数组结束的下标为16.
三、编写测试类:
1 from unittest import TestCase 2 from maxnumber import MaxNumber 3 4 class TestMaxNumber(TestCase): 5 def test_show_max(self): 6 self.MaxNumver=MaxNumber("-32, -10, 33, -23, 32, -12, 41, -12, 1, 3, 5, -98, 70, -21, 10, -9, 61") 7 self.assertEqual(self.MaxNumver.ShowMax(),[111, 12, 16])
运行结果截图:
由运行结果可知:该类通过测试。
四、性能分析:
操作步骤:
运行 -->性能分析器 -->配置文件
结果:
性能统计界面由名称、调用计数、时间、自身时间4列组成一个表格,见下图。
(1)表头Name显示被调用的模块或者函数;Call Count显示被调用的次数;Time(ms)显示运行时间和时间百分比,时间单位为毫秒(ms)。
(2)点击表头上的小三角可以升序或降序排列表格。
(3)在Name这一个列中双击某一行可以跳转到对应的代码。