----信1101-2 胡弦琴 20113026
王兵茹 20112917
2014-03-10
15:35:37
這個時間點開始發表這篇部落格 。(剛把程式改好,由於胡弦琴要去上課,所以後續的部落格由我寫完)。
今天上午最後一節課老師叫我們結組兩個人共同乙個小程式的設計,也就是求乙個整數陣列中所有子陣列和的最大值。
我跟胡弦琴拿到這個題目首先想的是我們要把這個程式的實現思路捋清楚,所以就開始在紙上寫寫畫畫。承認一開始的思路確實很亂,但是隨著我們不斷討論,思路也就越來越清楚。我們倆程式設計基礎都不是怎麼好,所以我倆共同的想法是可以使用乙個稍微笨拙的方法來實現,但是我們的**設計一定要規範,所有的情況要都考慮到。
思路:分兩層迴圈,外層的迴圈用於在陣列中的第i個數開始加,內層迴圈式實現從陣列的第i個開始,加到第j個,在加的過程當中,如果max>maxium,那就把max賦給maxium。
我們倆先寫的演算法:
int maxsubarray(int *a,int2014-03-10n)
上午最後一節課的時間,前20分鐘我們倆一邊相互討論,一邊開始設計我們的程式,我來敲**,胡弦琴在旁邊給我指點,哪一行中還需要加哪些細節,就一開始的時候我們是函式中並沒有對如果陣列為空怎麼處理,我們都想到了,跟上一次的實驗大體是類似的,所以我們就先完成大概最後再加乙個if...else語句。20分鐘很快就過去了,我們的函式部分剛剛寫完吧,但還不是很完整。接下來的20分鐘換成她來敲**,我在旁邊一邊想一邊看她寫的**是不是有什麼問題。說實話,在下課之前我們的程式沒有弄完,沒有執行出結果。所以今天下午又開始除錯。
也就是在我剛寫部落格之前,程式剛剛除錯完。
具體**如下:
#include#include根據老師的要求,我們在課上的時候不斷的討論不斷的做記錄,加上剛剛測試結果的記錄,都在下面,雖然有點亂,但是寫寫畫畫確實可以讓自個明白實現的過程:int maxsubarray(int a,int
n)
else}}
return
maxium;
}}int
main()
maxium=maxsubarray(a,n);
printf(
"maxium=%d\n
",maxium);
}else
return
0;
}
心得:本次的實驗跟上一節課老師給的課堂測試差不多,都是小程式,但是卻要在許多的細節做處理,實現**設計的規範性,但是我們的這個**時間效率確實不是很好,相對來說是乙個很保守的演算法。
雖然我倆的程式設計能力有限,但是還是感覺相互討論對雙方都是乙個促進。突然感覺結對開發確實是乙個不錯的學習方式。如果做的恰到好處,對雙方都是乙個促進。
求乙個陣列的連續子陣列的最大和
輸入乙個整型陣列,陣列中有正有負。陣列中的乙個或多個整數組成乙個子陣列。求所有子陣列的和的最大值,要求時間複雜度為o n 首先,根據題意,可能我們都會想到列舉陣列中所有的子陣列的和。我們都知道乙個長度為n的陣列,總共有n n 1 2個子陣列。計算出所有子陣列的和需要o n 2 時間。我們先來舉例分析...
求整數陣列中和最大的子陣列的和
鄭雲飛 韓亞華 這個問題的複雜性和不確定讓我們讓我們想到了列舉,求出每乙個子陣列的和,但這樣我們我們程式的時間複雜度 將會非常高,於是我們想把辦法簡化它。首先我們將陣列裡連續的正數和負數就和,這樣我們將得到乙個正負相間的 整數陣列。然後再對正整數陣列求最大子陣列,這樣最大子陣列必定是兩頭為正,有奇數...
求乙個陣列的最長連續子串行
分析 如果允許o nlogn 的複雜度,那麼可以先排序,可是本題要求o n 由於序列裡的元素是無序的,又要求o n 首先要想到用雜湊表。用乙個雜湊表unordered mapused 記錄每個元素是否使用,對每個元素,以該元素為中心,往左右擴張,直到不連續為止,記錄下最長的長度。class solu...