最大子陣列累加和 2種方法

2021-10-23 06:16:50 字數 1112 閱讀 9737

題目:最大子陣列累加和

給定乙個陣列arr=[1,-2,3,5,-2,6,-1];所有的子陣列中[3,5,-2,6]可以累加出最大的和12,所以返回12

什麼是子陣列,子陣列就是在原陣列中連續的一段陣列序列,必須是連續的。

例如:長度為7的子陣列有1個,即陣列本身。

長度為6的子陣列有2個,[1,-2,3,5,-2,6];[-2,3,5,-2,6,-1].

長度為5的子陣列有3個,[1,-2,3,5,-2];[-2,3,5,-2,6];[5,-2,6,-1]

長度為4的子陣列有4個,以此類推…

所以可能存在子陣列的個數有n^2(n*(n+1)/2)

分析思路:要求出最大子陣列累計和,

把所有可能的子陣列找出來,將它們累加算一下和,就可以找出最大子陣列累加和

以每乙個元素為開頭,為子陣列的第乙個元素

利用指標,單向掃瞄累加,從第乙個開始,若為累加和為正數就繼續累加,若累加和為負數就丟棄它(此處丟棄的並不是單個的元素,而是從前到後累加和為負數丟棄它),以下乙個元素為開頭,重複上面的步驟。

把每乙個求和要和max做比較,保留目前最大的繼續加,若後面累加的幾個元素出現比max小的,則不成立,仍保持前面累加最大的和。

暴力解法 **

package maxsubarry;

public

class

maxsubarry}if

(sum} system.out.

println

(maxsum);}

}

遞推法 **

package maxsubarry;

public

class

maxsubarrynew

else

if(sum>max)

} system.out.

println

(max+

",left="

+",right:"

+right)

; system.out.

println

(max);}

}

最大子段和 三種方法

今天參加了一場洛谷網的比賽,深受打擊.寒假過了這麼多天,一直沒有認真學習演算法,以至於現在的水平比兩個月前還要低.本來就沒有多少底子,又退步了許多,感慨萬分.在洛谷上看到這麼一道題 最大子段和 如果資料小的話,用暴力列舉很簡單就可以做出來了,時間按複雜度位o n 3 可是一道演算法題怎麼會這麼簡單呢...

最大累加陣列問題(最大子序和問題)

給定乙個陣列arr,返回子陣列的最大累加和 例如,arr 1,2,3,5,2,6,1 所有子陣列中,3,5,2,6 可以累加出最大的和12,所以返回12.要求 時間複雜度為o n o n 空間複雜度為o 1 o 1 1,2,3 5,2,6,1 12 3 5 2 6 12這是乙個很有意思的問題,如果我...

最大子串行和(2種)

時間限制 1 sec 記憶體限制 64 mb 輸入乙個長度為n的整數序列 a1,a2,an 從中找出一段連續的長度不超過m的子串行,使得這個子串行的和最大。例如 序列1,3,5,l,2,3,當m 2或3時,s 5 1 6 當m 4時,s 5 1 2 3 7。第1行乙個整數n表示序列的長度。第2行n個...