Leetcode 面试题 17.24. 最大子矩阵 (最大子数组和的二维版本)

【Leetcode 面试题 17.24. 最大子矩阵 (最大子数组和的二维版本)】Leetcode 面试题 17.24. 最大子矩阵 (最大子数组和的二维版本)
文章图片

1. 暴力做法枚举r1,c1, r2, c2,求和,时间复杂度O(N^6)很爆炸。
2. 优化方法,二维前缀和优化,O(1)时间内求出给定r1,c1,r2,c2区域的和,时间复杂度为O(N^4)
3. 降维动态规划优化。
Leetcode 面试题 17.24. 最大子矩阵 (最大子数组和的二维版本)
文章图片

枚举起始行和结束行,对列求和,等效成一维最大子序列问题。由于所有起始行和结束行都枚举过,所以这个做法一定是对的。
这道题目还需要记录更新r1,c1,r2,c2比一般的题目要难。

class Solution { public: vector getMaxMatrix(vector>& matrix) { int max = INT_MIN, n = matrix.size(), m = matrix[0].size(); int r1, c1, r2, c2; for(int i=0; i s(m); for(int j=i; j0) cur+=s[k]; else{ cur = s[k]; tmp = k; } if(cur>max){ max = cur; r1 = i; c1 = tmp; r2 = j; c2 = k; } } } } return {r1,c1,r2,c2}; } };






    推荐阅读