陣列中最大子陣列之和

2022-07-01 09:03:11 字數 1735 閱讀 1776

一.編寫程式

1.求陣列中最大子陣列之和

class

max_out(object):

defmaxmarry(lis):

dp =[lis[0]]

i = 1

for num in lis[1:]:

if dp[i - 1] <=0:

else

: i += 1

return(max(dp))

演算法實現:建立乙個新的陣列,該陣列有乙個值為所求陣列的第乙個值,判斷新建陣列的值是否是小於等於0,是的就把所求陣列的第二個值新增到新陣列裡,如果不是就將所求陣列的第二個值加上新陣列的值在新增到新陣列裡,迴圈此過程直到最後乙個數,這樣新陣列裡的最大值就是子陣列最大值。

2.進一步,從檔案讀入資料,熟悉檔案操作

with open(r'

c:\users\tbd\desktop\新建文字文件.txt

',encoding='

utf8

') as file_obj:

content =file_obj.read()

xlist=content.split(":"

)lis1=xlist[1].split(","

)lis1 = [int(lis1[i]) for i in

range(len(lis1))]

ma=maxmarry(lis1)

print(ma)

對檔案的操作為:從檔案獲取資料,先用分號隔開分為兩部分,再將後一部分用逗號隔開就可以得到包含資料的完整陣列,在呼叫上面的函式就可以了。

二.單元測試

我採用python提供相應的模組(unittest),單元測試:用於確定函式的某方面沒有問題。編寫測試用例的步驟:1.先導入unittest模組;2.建立乙個類(任意名)3.編寫需要測試的**對函式進行各方面的測試。這裡我們採用三組資料測試,其中有一種是錯誤的。

import

unittest

from ppp import *

class

testppp(unittest.testcase):

deftest_1(self):

lis = [-21,1,1,1,1]

self.assertequal(maxmarry(lis),4)

deftest_2(self):

lis = [-32,-10,33,-23,32,-12,41,-12,1,3,5,-98,70,-21,10,-9,61]

self.assertequal(maxmarry(lis),111)

deftest_3(self):

lis = [-2,1,1]

self.assertnotequal(maxmarry(lis),1)

if__name__ == '

__main__':

unittest.main()

測試結果:

通過測試結果可以看到我們的程式是正確的。

三.效能分析

執行cmd命令,輸入python -m cprofile ppp.py

得到結果圖:

陣列中最大子陣列之和

一 目的 熟悉程式設計風格 自學簡單 python 簡單效能測試 二 程式設計 1 測試工具及注意事項 使用visual studio 2017進行編譯,求陣列中最大陣列之和。注意 1.題目說的是子陣列是連續的 2.題目只要求和,不需要返回陣列的具體位置 3.陣列的元素是整數 2 單元測試配置過程 ...

陣列中最大子陣列之和

採用暴力破解法 三重for迴圈找出所有子陣列進行對比 def maxsubarray array maxsum 0 for i in range 0,len array for j in range i,len array sum 0 for k in range i,j 1 sum sum arr...

陣列中最大子陣列之和

乙個有n個整數元素的一維陣列 a 0 a 1 a n 1 求子陣列之和的最大值。例子 1,2,3,5,3,2 返回 8 0,2,3,5,1,2 返回 9 9,2,3,5,3 返回 2 需要注意的是,如果考慮到陣列首尾相連,則 1 先按不相連計算出最大值max 2 從尾往頭掃瞄,找出最大值m1,並記錄...