LeetCode-85.连续矩形面积

一、C实现

1. 参考

https://www.cnblogs.com/GarrettWale/p/15800968.html

2. 实现代码

复制代码
#include <stdio.h>
#include <string.h>

#define ARRAY_SIZE(arr) (sizeof(arr)/sizeof(arr[0]))

int min_val(int x, int y) { return x < y ? x : y; }
int max_val(int x, int y) { return x > y ? x : y; }

int max_histogram_area(int *arr, int sz)
{
    int i, j, lm, mh, res = arr[0];

    for (i = 0; i < sz; i++) {
        if (i+1 < sz && arr[i] <= arr[i+1]) {
            continue;
        }
        lm = arr[i];
        for (j = i-1; j >= 0; j--) {
            lm = min_val(lm, arr[j]);
            res = max_val(res, lm * (i - j + 1));
        }
    }

    return res;
}

int main()
{
    int i, j, k, m, max = 0;
    int matrix[][5] = {
        {1, 0, 1, 0, 0},
        {1, 0, 1, 1, 1},
        {1, 1, 1, 1, 1},
        {1, 0, 0, 1, 0},
    };
    int arr[5];
    int h = ARRAY_SIZE(matrix);
    int w = ARRAY_SIZE(matrix[0]);
    printf("h=%d, w=%d\n", h, w);

    /* 以每行第一个元素为原点,构建一维数组 */
    for(i = 0; i < h; i++) {
        for(j = 0; j < w; j++) {
            arr[j] = 0;
            for (k = i; k >=0; k--) {
                if (matrix[k][j] == 1) {
                    arr[j]++;
                } else {
                    break;
                }
            }
            printf("arr[%d]=%d ", j, arr[j]);
        }
        printf("\n");
        /* 借助84题获取直方图最大矩形面积 */
        m = max_histogram_area(arr, ARRAY_SIZE(arr));
        max = max_val(m, max);
    }

    printf("max=%d\n", max); //6

    return 0;
}


/*
~/file_161/9.LCode$ ./pp
h=4, w=5
arr[0]=1 arr[1]=0 arr[2]=1 arr[3]=0 arr[4]=0 
arr[0]=2 arr[1]=0 arr[2]=2 arr[3]=1 arr[4]=1 
arr[0]=3 arr[1]=1 arr[2]=3 arr[3]=2 arr[4]=2 
arr[0]=4 arr[1]=0 arr[2]=0 arr[3]=3 arr[4]=0 
max=6
*/
复制代码

 

posted on   Hello-World3  阅读(0)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示