本文主要是介绍ACM整理(四)——1497面积最大的全1子阵,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
编程思想:
本质为计算直方图中最小长方形面积
设立三个数组,h,l,r
数组h[i]代表从当前行向上的直方图的第i列有多少个1,有0间隔即不算
数组l[i]代表大于等于h[i]个1的列最小标号为多少
数组r[i]代表大于等于h[i]个1的列最大标号为多少
算完这三个数组之后,循环j次~用公式h[i]*(r[i]-l[i]+1)计算以该行为底的最大矩形
上边的步骤循环i次,即将i行为底都统计一遍,找到最大矩形即可
存疑:
为什么有了下边这句话就对了,没有就不对呢?
memset(h,0,sizeof(h));
这篇关于ACM整理(四)——1497面积最大的全1子阵的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!