面試經典(6) 連續子陣列最大和 二維

2021-06-21 14:42:47 字數 811 閱讀 9986

前面寫了一篇一維陣列求連續子陣列最大和二維的情況會複雜很多會巧妙的借用一維的演算法。

如果暴力解法,複雜度明顯不盡如人意,因為求和的過程中,有很多冗餘情況,所以我們可以考慮將前面求和的結果儲存下來,以空間換時間,這樣可以降低複雜的。設ps[i][j]是以(i,j),(1,j),(i,1),(1,1)為頂點的矩形區域的元素之和。

稍微分析一下得,ps[i][j]=ps[i-1][j]+ps[i][j-1]-ps[i-1][j-1]+a[i][j];

利用兩層迴圈就可以遞推得ps[i][j]。

我們前面提到,一維陣列的連續子陣列求和線性完成,我們考慮能否把二維的轉換為一維。

上圖就說明了問題,我們把a行c行之間的列看成乙個「元素」,這樣就轉換成一維的情況。只要列舉a、c就可以掃瞄出所有矩形。

**如下:

#define max 100

int a[max][max];

long long ps[max][max];

long long matrixsum(int a,int c,int i)

int find_max(int n,int m)

if(maxsum>maxval)

maxval=maxsum;

} }return maxval;

}

參考:

7 連續子陣列的最大和(子陣列 最大和)

題目 給乙個陣列,讓求連續陣列元素的最大和。public int maxsumofsubarray int arr 思路 連續子陣列的最大和動態規劃 dp i dp i 表示以arr i 結尾的連續子陣列的最大和。arr i 必須加上,就不判斷arr i 是正還是負。dp i 等於arr i 加上以...

27 連續子陣列的最大和

連續子陣列的最大和 hz偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了 在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如 連續子向量的最大和為8...

30 連續子陣列的最大和

題目描述 hz偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了 在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如 連續子向量的最大和為8 從第0個...