1.題目:返回乙個整數陣列中最大子陣列的和。
要求:輸入乙個整形陣列,陣列裡有正數也有負數。
陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。
求所有子陣列的和的最大值。要求時間複雜度為o(n)。
2.設計思想:
本題目最大的難點是如何找出子陣列並且時間複雜度為o(n);我的思路是:從總左邊(a[0])開始遍歷整個陣列,一直到最右邊結束(a[n-1]),在這個過程中記錄到目前為止最大的子陣列和sofar。sofar初始化成0。假如我們已經找到a[0]到a[n-1]之間的最大子陣列和,那麼a[0]到a[i]之間的最大子陣列和是怎樣的呢?要麼「還是a[0]到a[i-1]之間的最大子陣列和」,要麼是「從a[i]開始,往前幾個連續的數的最大值」。 在求從a[i]開始,往前幾個連續的數的最大值時,用到如下性質:從a[i]開始往前幾個連續的數的最大值maxending_i等於(maxending_i-1)+a[i]和0兩者之中的最大值,即maxending_i=max((manending_i-1)+a[i],0)
4.總結
剛開始本來打算是找出每乙個子陣列,再求其最大值,當寫程式時發現程式**比較麻煩,而且好多**的功能是重複的,於是我就開始閱讀上學期的資料結構的課本,找出了適合這個題目的思路。當我寫完後,感覺如果剛開始定義了陣列的長度,那麼這個程式的使用範圍就收到限制,於是就思考怎麼能使陣列的長度可以任意改變,然後我就想到了大一學習c++時講過的指標可以定義動態陣列,於是在該程式中就使用了指標。
專案計畫總結:
時間記錄日誌:
返回乙個整數陣列中最大子陣列的和。
該題的意思是 如果乙個陣列為 1 5 3 19 5 3 第乙個數之後若是該數與前乙個數之和大於該數那麼將這個和替換概數 即5 1 5,5不變 而5 3 5 則將三替換為8以此類推 當乙個數與前乙個數之和再次小於這個數時,這個數為乙個下乙個的最小陣列,如5 3 19 11 5 5 則5為下乙個最小陣列...
返回乙個整數陣列中最大子陣列的和
1.題目 要求 要求程式必須能處理1000 個元素 每個元素是int32 型別的 輸入乙個整形陣列,陣列裡有正數也有負數。陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。求所有子陣列的和的最大值。要求時間複雜度為o n 2.設計思想。分別計算出所有子陣列的和,進行比較,找出最大子陣列...
返回乙個整數陣列中最大子陣列的和
1.設計思想 將一維迴圈陣列採用遍歷的方法來尋找最大子陣列,將含n個數的迴圈陣列依次從各個點斷開,產生n個n個陣列的單鏈陣列,再遍歷尋找最大子陣列。2.出現的問題 整形陣列的生成方式 3.可能的解決方案 整形陣列隨機生成,每個子陣列的資料個數也是隨機的。4.源 include using names...