環狀二維陣列最大子陣列求和

2022-08-16 12:00:13 字數 1760 閱讀 1898

題目:返回乙個二維整數陣列中最大子陣列的和。要求:輸入乙個二維整形陣列,陣列裡有正數也有負數。二維陣列首尾相接,象個一條首尾相接帶子一樣。

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 列舉所有行的...