子矩阵的最大累加和问题
題目
給定一個矩陣matrix,其中的值有正、有負(fù)、有0,返回子矩陣的最大累加和。?
例如,matrix為:?
-1 -1 -1?
-1 ?2 ?2?
-1 -1 -1?
其中最大累加和的子矩陣為:?
2 2?
所以返回4。
基本思路
首先看這樣一個例子,假設(shè)一個2行4列的矩陣如下:?
-2 3 -5 7?
1 ?4 -1 ?-3?
如何求必須含有2行元素的子矩陣中的最大累加和?可以把兩列的元素相加,然后得到累加數(shù)組[-1, 7, -6, 4],接下來求這個累加數(shù)組的最大累加和,結(jié)果就是7,且這個子矩陣數(shù):?
3?
4?
也就是說,如果一個矩陣一共有k行且限定必須含有k行元素的情況下,我們只要把矩陣的每一列的k個元素累加生成一個累加數(shù)組,然后求出這個數(shù)組的最大累加和,這個最大累加和就是必須含有k行元素的子矩陣中的最大累加和。?
對于整個N*N的矩陣來說,我們需要考慮以第一行開頭的一行矩陣、兩行矩陣、三行矩陣…N行矩陣;以及以第二行開頭的一行矩陣、二行矩陣…N-1行矩陣;……以最后一行開頭的一行矩陣。將所有的這些情況中的最大累加和找到即可。一共有O(N2)中情況,找到累加數(shù)組中最大累加和的時間復(fù)雜度是O(N),所以最終的時間復(fù)雜度是O(N3)。
?
總結(jié)
以上是生活随笔為你收集整理的子矩阵的最大累加和问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 合并两个有序的单链表
- 下一篇: 在数组中找到一个局部最小的位置