数组中最大的子数组之和

数组中最大的子数组之和

一、程序分析

初始数据:

-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这一个列中双击某一行可以跳转到对应的代码。

 

 

 

 

 

 

 

posted @ 2021-03-14 14:12  OHHO  阅读(231)  评论(2)    收藏  举报