求数组的最大子数组之和

求数组的最大子数组之和

题目:求出数组中最大的子数组之和

要求:

输入,一个数组,和它的大小 输出,这个数组中最大子数组的和

一、程序代码

本程序选用python软件进行编写

代码:

#求数组的最大子数组之和
def function(lists):
    max_sum=lists[0] #获取数组第一个数据
    pre_sum=0 #
    for i in lists: #遍历数组lists
        if pre_sum<0: 
            pre_sum=i
        else:
            pre_sum+=i
        if pre_sum>max_sum:
            max_sum=pre_sum 
    return max_sum #返回最大子数组之和

 

二、单元测试

python中有太多的单元测试框架和工具,比如:unittest, testtools, subunit, coverage, testrepository, nose, mox, mock, fixtures, discover等,这里本文使用unittest工具进行测试,unittest是一个python版本的junit,junit是java中的单元测试框架,对java的单元测试。

代码:

import unittest  #导入unittest工具
class TestStudent(unittest.TestCase):
    def test1(self):
        data=[-1,2,3,-4,5,9,-5,6,-9]
        result=function(data)
        self.assertEqual(result,16)
    def test2(self):
        data=[-1, 2, -5, 3, -4,4,5,-3]
        result=function(data)
        self.assertEqual(result,9)
    def test3(self):
        data=[-1, 20, -5, 30, -4,-2,5]
        result=function(data)
        self.assertEqual(result,45)
    def test4(self):
        data=[-2, -3, -5, -1, -9,8,-2,5]
        result=function(data)
        self.assertEqual(result,11)
  unittest.main()

运行结果:

 

 

 

从图中的运行结果可知,运行结果正确

三、性能分析

本性能分析选用的是cProfile模块

代码:

if __name__ == '__main__':
    suite_test=unittest.TestSuite()
    suite_test.addTest(TestCase('test1'))
    suite_test.addTest(TestCase('test2'))
    runner=unittest.TextTestRunner()
    runner.run(suite_test)
    import c Profile
    cProfile.run("suite_test.addTest(TestCase('test1'))")
    cProfile.run("suite_test.addTest(TestCase('test2'))")

 运行结果:

 

其中:

ncalls:表示函数调用的次数;
tottime:表示指定函数的总的运行时间
percall:(第一个percall)等于 tottime/ncalls;
cumtime:表示该函数及其所有子函数的调用运行的时间,即函数开始调用到返回的时间;
percall:(第二个percall)即函数运行一次的平均时间,等于 cumtime/ncalls;
filename:lineno(function):每个函数调用的具体信息;

posted @ 2021-03-14 15:30  摘一颗星星  阅读(156)  评论(1)    收藏  举报