上一周學了分而治之的演算法策略,這週就先找了一題貼了此標籤的題試試手。
find the contiguous subarray within an array (containing at least one number) which has the largest sum.
for example, given the array [-2,1,-3,4,-1,2,1,-5,4],這題目描述還挺簡潔的,但一開始我卻想不到從何處下手,回想課上的例子,許多都是將問題不停對半分(例如歸併排序,兩個數乘法),而這個問題直接將陣列對半分明顯行不通。後來,就想嘗試下分成幾個連續序列,每個連續序列的和區域性最大(就是無論往前加還是往後加都只會變得更小),最後比較這幾個連續序列的和(其實我的**是在過程中比較的),從而得到結果。the contiguous subarray [4,-1,2,1] has the largest sum = 6.
但怎麼分才能得到乙個和區域性最大的序列呢?我的想法是:區域性和最大的連續序列,要滿足使這個序列無論往前加,還是往後加,和都會變小,滿足這些條件的序列中,序列和最大的序列即是所求。所以可以遍歷陣列,用兩個變數,乙個sum記錄從某個值開始的連續序列的和,其一開始從整個序列的第乙個值開始,一旦sum小於0,就表示前面已經計算的序列的和若再加到後面的序列和上,序列和只會更小,所以就捨棄前面的序列和,從使sum為0的序列值的下乙個值開始計算sum,另乙個maxsum記錄到此為止的連續子陣列的最大和(也是其中某個連續序列的和),通過比較maxsum和sum,一旦得到乙個更大的和值,就設定該變數。總之,sum在計算中就是其中某個連續子串行的和,maxsum就是計算中最大的sum值,這樣maxsum即是該陣列中的乙個連續子陣列的最大和。
第一次錯誤(沒考慮到陣列一開始可以為負值):
class solution
return maxsum;
}};
maxsum一開始不應設定為0,應設定為乙個無論如何都小於等於後面計算的sum的數,以免後面計算的maxsum是乙個不存在的初始值,所以可以設定為序列的第乙個元素的值。
正確版本:
class solution
return maxsum;
}};
演算法設計與應用基礎作業第二週
53.maximum subarray descripyion find the contiguous subarray within an array containing at least one number which has the largest sum.for example,give...
《系統分析與設計》第二週作業
瀑布模型 優點 1.降低軟體開發的複雜程度,提高軟體開發過程的透明性,提高軟體開發過程的可管理性 2.推遲軟體實現,強調在軟體實現前必須進行分析和設計工作 3.以專案的階段評審和文件控制為手段有效地對整個開發過程進行指導,保證了階段之間的正確銜接,能夠及時發現並糾正開發過程中存在的缺陷,使產品達到預...
演算法設計與應用基礎 第二週(1)
add to list description submission solutions n 2 times.you may assume that the array is non empty and the majority element always exist in the array.演...