環形陣列求最大子陣列和

2021-08-21 05:54:15 字數 900 閱讀 9706

陣列是環形的,即首尾相接(下標n-1的元素後面的元素下標為0),求最大子陣列和

環形陣列求最大子陣列和

解法一:

把該環形陣列從某一點展開,連寫兩遍(複製乙份接到自己後面),然後當成無環的陣列求最大子陣列和,但這裡要限制乙個條件,就是最大子陣列的長度不可以超過n,所以求的時候要注意判斷。

例如:上圖中展開寫兩遍為a1,a2,a3,a4,a1,a2,a3,a4。

這種情況下限定最大子陣列的長度不可以超過n的作用:假如陣列為,則展開複製乙份接到自己後面為-1,2,3,4,-1,2,3,4,此時若直接求則為2,3,4,-1,2,3,4,很明顯不對了,所以要限定最大子陣列的長度不可以超過n。

解法二:

這個問題的最優解一定是以下兩種可能。

可能一:最優解沒有跨過a[n-1]到a[0],即和非環形陣列一樣了。

可能二:最優解跨過a[n-1]到a[0],新問題。

對於第一種情況,我們可以按照非環形陣列求法來求,為max1;對於第二種情況,可以將原問題轉化為陣列的最小子陣列和問題,再用陣列全部元素的和減去最小子陣列和,那麼結果一定是跨過a[n-1]到a[0]情況中最大的子陣列和,設為max2。最終結果即為max1與max2中較大的那個。

例1:有陣列6、-1、-6、8、2

求得max1=10,max2=16,則取較大的max2作為結果。

例2:有陣列-6、8、2、6、-1

求得max1=16,max2=15,則取較大的max1作為結果。

為什麼這樣求:陣列元素「sum - 最小子陣列和 = 跨過a[n-1]到a[0]情況中的最大子陣列和」這一點有些疑問。我們可以這樣理解:n個數的和是一定的,那麼如果我們在這n個數中找到連續的一段數,並且這段數是所有連續的數的和最小的,那麼「sum-最小子段和」的結果一定最大。故求得:跨過a[n-1]到a[0]情況中的最大子陣列和。

環形陣列求最大子陣列

題目 返回乙個環形陣列中的最大子陣列。要求 兩人結對完成程式設計任務。一人主要負責程式分析,程式設計。一人負責 複審和 測試計畫。思想 上一次的題目是返回乙個整數陣列中最大子陣列的和 這次在上一次的基礎上,我們原本想採用兩個相同陣列首位相連來實現環形的功能,採用原來的方法未能實現,後來採用課堂上張世...

求整數陣列 環形陣列中最大子陣列的和

一 整數陣列 1 題目要求 a 輸入乙個整數陣列,陣列裡有正數也有負數。b 陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。c 求所有子陣列的和的最大值。2 思路構想 求陣列中的乙個元素 a 和上乙個元素 b 的和 c 將 a 和 c 進行比較,若 c a 則用 c 代替 a 的值,...

環形陣列求子陣列最大和

由於上一次輸入陣列出錯,本次更正。設計思想 1.輸入字串陣列 2.將字串陣列賦初值刪去空格 換行以及初值,將其他字元轉化成整數陣列儲存起來。3.環形整數陣列在每乙個點出都可能斷開,所以設定兩個迴圈,借用第一次計算乙個一維陣列的子陣列最大和 4.從每乙個點都開始一次計算出每乙個一維陣列的子陣列最大和,...