題目:返回乙個二維整數陣列中最大子陣列的和。要求:輸入乙個二維整形陣列,陣列裡有正數也有負數。二維陣列首尾相接,象個一條首尾相接帶子一樣。
n陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。求所有子陣列的和的最大值。要求時間複雜度為o(n)。
結對程式設計要求: 兩人結對完成程式設計任務。 一人主要負責程式分析,**程式設計。
一人負責**複審和**測試計畫。
結對開發過程:
這次的程式設計開發是基於上次的以為陣列,我和我的搭檔@天使rl惡魔開始了認真的討論,再結合課堂上的同學討論,如何能在二維陣列原有的基礎上,加上首尾相連這個條件,同時降低時間複雜度,這種方法的大概思想是:遍歷陣列裡面的每乙個數將第乙個數變為最後乙個數,具體演算法 a[i][j-1]=a[i][j],這樣又變成了乙個新的二維陣列,輸出每個陣列的最大子陣列和,然後比較每個輸出的和,找出最大的數。
程式**:
1 #include 2程式執行截圖:using
namespace
std;34
int maxsubarray(int **a,int n,intm)5
23else
2430}31
}32//計算二維陣列最大子陣列的和
33int
temp;
34int max=a[0][0
];35
intans;
36//
如果m==1
37if(m==1)38
47else
4851
if(ans
52 ans=temp;53}
54}55}
56else
5766
else
6770
for(int k=m-2;k>=0;k--)
7181
else
8288
if(ans
89 ans=temp;90}
91}92}
93}94return
ans;95}
9697
intmain()
98115
}116
int ans=maxsubarray(a,n,m);
117 printf("
二維陣列的最大子陣列之和是:%d\n
",ans);
118for(a2=0;a21;a2++)
119
123 a[i][m-1]=temp;
124}
125126
for(i=0;i)
127133 cout
134 k++;
135}
136137
}138
139 a1=maxsubarray(a,n,m);
140 printf("
二維陣列的最大子陣列之和是:%d\n
",a1);
141}
142return0;
143 }
總結感受:
在程式設計之前應該與之前的環狀一位陣列相聯絡,我們使用了相同的方法解決了問題。同樣的由最後一列移到第一列,前面幾列依次向後移,有n列就移n-1次,求出n個矩陣的最大子陣列,進而在算出環狀二維陣列的最大子陣列。
環狀二維陣列
1.題目 輸入乙個二維整形陣列,陣列裡有正數也有負數。二維陣列首尾相接,象個一條首尾相接帶子一樣。陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。求所有子陣列的和的最大值。2.設計思路 參照環狀一維陣列,將二維陣列進行擴充套件。只將陣列的列數擴大為原來的2 n 1,行數不變。3.源 ...
二維陣列最大子陣列和
陣列輸出 int sum a 0 0 b,c n int imin 0,imax 0,jmin 0,jmax 0 for i 0 i c i a 0 i for i 1 i 4 i else b c j if sum b if i1 else for i imin i imax i cout cou...
二維陣列求最大子陣列
程式要使用的陣列放在乙個叫 input.txt 的檔案中,檔案格式是 陣列的行數,陣列的列數,每一行的元素,用逗號分開 每乙個數字都是有符號32位整數,當然,行數和列數都是正整數。演算法思想 對於一維的陣列,我們可以很容易用動態規劃的方法求得最大子陣列 所以我們將i 0.n j i.n 列舉所有行的...