欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

面试题 17.24. 最大子矩阵 (降维枚举 / 降维动态规划)

程序员文章站 2022-03-16 08:16:42
...

LeetCode: 面试题 17.24. 最大子矩阵

面试题 17.24. 最大子矩阵 (降维枚举 / 降维动态规划)


面试题 17.24. 最大子矩阵 (降维枚举 / 降维动态规划)

枚举起始行和结束行,对列求和,等效成一维最大子序列问题。



降维枚举

class Solution {

    public int[] getMaxMatrix(int[][] matrix) {
        int row = matrix.length, col = matrix[0].length;
        int[] ans = new int[4];
        
        int res = Integer.MIN_VALUE;
        for (int i = 0; i < row; i++) {
        	// 记录各列的前缀和
            int[] temp = new int[col];

            for (int j = i; j < row; j++) {
                int cur = 0, tmp = 0;

                for (int k = 0; k < col; k++) {
                    temp[k] += matrix[j][k];
                    if(cur > 0) cur += temp[k];
                    else{
                        cur = temp[k];
                        tmp = k;
                    }

                    if(cur > res){
                        res = cur;
                        ans[0] = i; ans[1] = tmp;
                        ans[2] = j; ans[3] = k;
                    }
                }
            }
        }

        return ans;
    }


}



面试题 17.24. 最大子矩阵 (降维枚举 / 降维动态规划)






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