這題不使用其他方法強行四重for也可以過,但是記憶體和時間占用可謂慘不忍睹。
本題可採用矩陣字首和的方法解決,從記憶體占用到時間處理上都會好很多。
第一遍**如下:
/*感覺這題有點奇怪的簡單...
先建立乙個和原矩陣相同大小的矩陣
然後使用四個判斷把rmin rmax,cmin,cmax確定下來
最後使用上述四個引數進行計算
*/class solution
}array[i][j] = sum;}}
return array;}}
使用字首和矩陣改良後的**
/*演算法學習結束後改正的答案:
首先建立乙個比原矩陣多一行一列的字首和矩陣dp
初始化的時候首先將第一行第一列初始化為0
而後按從左到右從上到下的順序初始化
而後使用演算法面積計算方法可以得到(0,0)到(i,j)的面積
最後取結果的時候用同樣的方法取得array結果
可以讓時間複雜度精簡很多
第一次計算是左下加右上減左上重複加右下沒算的
第二次計算是整個大面積減去左邊一整塊的面積和上面一整塊的面積
最後減去左上重疊面積
*/class solution
for(int i = 0; i <= n; i++)
for(int i = 1; i <= m; i++)
for(int j = 1; j <= n; j++)
dp[i][j] = dp[i-1][j] + dp[i][j-1] - dp[i-1][j-1] + mat[i - 1][j - 1];//此處mat對應dp[i][j]
for(int i = 0; i < m; i++)
}return array;}}
時間擊敗88%
演算法的學習真不是一撮而就的過程,下次再碰見類似的時間擊敗數可得小心了,大概率是演算法不過關。
leetcode 1314 矩陣區域和
給你乙個 m n 的矩陣 mat 和乙個整數 k 請你返回乙個矩陣 answer 其中每個 answer i j 是所有滿足下述條件的元素 mat r c 的和 i k r i k,j k c j k r,c 在矩陣內。示例 1 輸入 mat 1,2,3 4,5,6 7,8,9 k 1 輸出 12,...
leetcode 1314 矩陣區域和
給你乙個 m x n 的矩陣 mat 和乙個整數 k 請你返回乙個矩陣 answer 其中每個 answer i j 是所有滿足下述條件的元素 mat r c 的和 i k r i k,j k c j k 且 r,c 在矩陣內。示例 1 輸入 mat 1,2,3 4,5,6 7,8,9 k 1 輸出...
動態規劃 leetcode 1314
題目 給你乙個 m n 的矩陣 mat 和乙個整數 k 請你返回乙個矩陣 answer 其中每個 answer i j 是所有滿足下述條件的元素 mat r c 的和 i k r i k,j k c j k r,c 在矩陣內。解答 class solution def matrixblocksum ...