注册 登录
编程论坛 C语言论坛

找出最大矩阵,并返回其面积

风过无痕1989 发布于 2020-10-27 11:42, 1902 次点击
给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。
输入:
[
   ["1","0","1","0","0"],
   ["1","0","1","1","1"],
   ["1","1","1","1","1"],
   ["1","0","0","1","0"]
]

输出: 6

程序请用C语言,不要C++,谢谢!
8 回复
#2
rjsp2020-10-27 15:17
leetcode 给的函数最恶心

程序代码:
#include <stdio.h>
#include <stdint.h>

int main( void )
{
    size_t map[][5] = { {1, 0, 1, 0, 0}
                      , {1, 0, 1, 1, 1}
                      , {1, 1, 1, 1, 1}
                      , {1, 0, 0, 1, 0} };

    ///////////////////////////////////////////////

    const size_t row = sizeof(map)/sizeof(*map);
    const size_t col = sizeof(*map)/sizeof(**map);
    for( size_t c=0; c!=col; ++c )
    {
        size_t deepth = 0;
        for( size_t r=0; r!=row; ++r )
        {
            if( map[r][c] != 0 )
                map[r][c] = ++deepth;
            else
                deepth = 0;
        }
    }

    size_t s_max = 0;
    for( size_t r=0; r!=row; ++r )
    {
        for( size_t c=0; c!=col; ++c )
        {
            size_t deepth = SIZE_MAX;
            for( size_t width=0; c+width!=col && map[r][c+width]!=0; ++width )
            {
                deepth = deepth<map[r][c+width] ? deepth : map[r][c+width];
                s_max = s_max>(width+1)*deepth ? s_max : (width+1)*deepth;
            }
        }
    }
   printf( "%zu\n", s_max );
}
#3
风过无痕19892020-10-27 20:58
回复 2楼 rjsp
我现在的系统运行不了,DEV那里 [Note] use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 to compile your code

可是这几个我来回换,都不行。这个帖子容我几天,今天我已经买回来一个西部数据500G的固态硬盘,明天先安装一个 win 8.1 系统,然后安装VS2015。再来试试,谢谢!
#4
rjsp2020-10-27 21:11
可是这几个我来回换,都不行。
你把“不行”的情况说一下嘛,我都没法知道是怎么个不行。
#5
zbjzbj2020-10-27 23:23
C99以前的版本不支持for循环中括号中声明变量。
 例for( size_t r=0; r!=row; ++r )  ==>
    size_t r;
    for( r=0; r!=row; ++r )
#6
风过无痕19892020-10-30 01:50
回复 4楼 rjsp
安装了个win10系统,整个界面都不一样了,不结帖还回复不了

来回换就是将 -std=c99、std=c11、那四个都换了,在DEV中都无法运行

我的VS2015还没安装完成,我在论坛右上角的“在线编程”那里已经通过了
#7
风过无痕19892020-10-30 01:53
回复 5楼 zbjzbj
谢谢!今晚挂机让他自动安装,明天再试
#8
rjsp2020-10-30 08:16
以下是引用风过无痕1989在2020-10-30 01:50:57的发言:
来回换就是将 -std=c99、std=c11、那四个都换了,在DEV中都无法运行

跟系统无关,只跟你安装的编译器(TDM-GCC 4.9.2)相关。
我一直都觉得你编译参数填写的地方不对,要不你截个图给我看看。
#9
风过无痕19892020-10-30 12:54
回复 8楼 rjsp
我刚安装了新系统,原来那个系统暂时回不去了
1