求最大全1子矩阵中1的个数

发布于 2022-09-05 06:12:58 字数 195 浏览 12 评论 0

给定一个01矩阵map,求其中全是1的子矩阵里1的最大个数。
例如:

1 1 1 0

其中最大的全1子矩阵有3个1,返回3.

1 0 1 1
1 1 1 1
1 1 1 0
其中最大的全1子矩阵有6个1,返回6.

对于N*M的01矩阵,求时间复杂度为O(N*M)的Javascript实现方案

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

眼眸 2022-09-12 06:12:59
function getMaxMatrix(map){
    if(map == null || map.length == 0 || map[0].length == 0) return 0;
    var maxArea = 0;
    var height = [];
    for(var k = 0; k < map[0].length; k++){
        height[k] = 0;
    }

    for(var i = 0; i < map.length; i++){
        for(var j = 0; j < map[0].length; j++){
            height[j] = map[i][j] == 0 ? 0 : height[j] + 1;
        }
        maxArea = Math.max(maxMatrixFromBottom(height), maxArea);
    }
    return maxArea;
}

function maxMatrixFromBottom(height){
    if(height == null || height.length == 0) return 0;
    var maxArea = 0;
    var stack = [];
    for(var i = 0; i < height.length; i++){
        while(stack.length != 0 && height[i] <= height[stack[stack.length - 1]]){
            var j = stack.pop();
            var k = stack.length == 0 ? -1 : stack[stack.length - 1];
            var curArea = (i - k -1) * height[j];
            maxArea = Math.max(maxArea, curArea);
        }
        stack.push(i);
    }
    while(stack.length != 0){
        var j = stack.pop();
        var k = stack.length == 0 ? -1 : stack[stack.length - 1];
        var curArea = (i - k -1) * height[j];
        maxArea = Math.max(maxArea, curArea);
    }
    return maxArea;
}

var map =[
    [1,1,1,1],
    [1,1,1,1],
    [1,0,0,0]
  ];
console.log(getMaxMatrix(map))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文