程序员面试金典 - 面试题 17.24. 最大子矩阵(转成一维最大子序和 DP)
生活随笔
收集整理的這篇文章主要介紹了
程序员面试金典 - 面试题 17.24. 最大子矩阵(转成一维最大子序和 DP)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 1. 題目
- 2. 解題
- 2.1 前綴和(超時(shí))
- 2.2 動(dòng)態(tài)規(guī)劃
1. 題目
給定一個(gè)正整數(shù)和負(fù)整數(shù)組成的 N × M 矩陣,編寫代碼找出元素總和最大的子矩陣。
返回一個(gè)數(shù)組 [r1, c1, r2, c2],其中 r1, c1 分別代表子矩陣左上角的行號(hào)和列號(hào),r2, c2 分別代表右下角的行號(hào)和列號(hào)。
若有多個(gè)滿足條件的子矩陣,返回任意一個(gè)均可。
來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/max-submatrix-lcci
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
2. 解題
類似題目: LeetCode 363. 矩形區(qū)域不超過(guò) K 的最大數(shù)值和(DP+set二分)
2.1 前綴和(超時(shí))
- 求出每個(gè)位置與(0,0)構(gòu)成的子矩陣的和
- 4層 for 循環(huán)遍歷左上角為(x,y),右下角為(i,j)的子矩陣
- 其和為 sum=prefixsum[i][j]?prefixsum[x?1][j]?prefixsum[i][y?1]+prefixsum[x?1][y?1]sum = prefixsum[i][j]-prefixsum[x-1][j]-prefixsum[i][y-1]+prefixsum[x-1][y-1]sum=prefixsum[i][j]?prefixsum[x?1][j]?prefixsum[i][y?1]+prefixsum[x?1][y?1]
- 復(fù)雜度 O(m2n2)O(m^2n^2)O(m2n2),通過(guò)14/25個(gè)測(cè)試
2.2 動(dòng)態(tài)規(guī)劃
類似題目:
LeetCode 152. 乘積最大子序列(DP)
本題參考:LeetCode 53. 最大子序和(動(dòng)態(tài)規(guī)劃),本質(zhì)一樣。
- 2層for循環(huán)先把所有可能的行組合找出來(lái)
- 然后列向求和,壓扁它
- 對(duì)這個(gè)壓扁的一維數(shù)組求最大子序和即可
- 時(shí)間復(fù)雜度 O(m2n)O(m^2n)O(m2n)
384 ms 12.7 MB
總結(jié)
以上是生活随笔為你收集整理的程序员面试金典 - 面试题 17.24. 最大子矩阵(转成一维最大子序和 DP)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: LeetCode 901. 股票价格跨度
- 下一篇: LeetCode 107. 二叉树的层次