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 2025-02-15 20:59 Hello-World3 阅读(0) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!