1. 程式人生 > >劍指offer——連續子陣列的最大和

劍指offer——連續子陣列的最大和

這是一個動態規劃的問題,動態規劃的基本思想:若要解一個給定問題,我們需要解其不同部分(即子問題),再合併子問題的解以得出原問題的解。 通常許多子問題非常相似,為此動態規劃法試圖僅僅解決每個子問題一次,從而減少計算量: 一旦某個給定子問題的解已經算出,則將其記憶化儲存,以便下次需要同一個子問題解之時直接查表。 求最大值用max函式即可解決,不過求連續子陣列的和需要分解成子問題。 把當前值與前項和相加,與當前值判斷是否符合最大和要求,再根據儲存的”最大和“的集合求最大和。 d[i]=max(d[i-1]+array[i],array[i]) 其實將問題分解成子問題,並不容易找到。

class Solution():
	def FindGreatestSumOfSubArray(self,array):
		n=len(array)
		d=[i for i in array]
		for j in range(1,n):
			d[j]=max(d[j-1]+array[j],array[j])
		return max(d)