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

Leetcode 面试题 17.24. 最大子矩阵 (最大子数组和的二维版本)_第1张图片

1. 暴力做法枚举r1,c1, r2, c2,求和,时间复杂度O(N^6)很爆炸。

2. 优化方法,二维前缀和优化,O(1)时间内求出给定r1,c1,r2,c2区域的和,时间复杂度为O(N^4)

3. 降维动态规划优化。

Leetcode 面试题 17.24. 最大子矩阵 (最大子数组和的二维版本)_第2张图片

枚举起始行和结束行,对列求和,等效成一维最大子序列问题。由于所有起始行和结束行都枚举过,所以这个做法一定是对的。

这道题目还需要记录更新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};
    }
};

 

 

 

 

 

你可能感兴趣的:(算法)