CSDN编程挑战之寻找直方图中面积最大的矩形
2014-01-23 09:57
363 查看
题目描述:给定直方图,每一小块的height由N个非负整数所确定,每一小块的width都为1,请找出直方图中面积最大的矩形。如下图所示,直方图中每一块的宽度都是1,每一块给定的高度分别是[2,1,5,6,2,3]: 那么上述直方图中,面积最大的矩形便是下图所示的阴影部分的面积,面积=10单位。请完成函数largestRectangleArea,实现寻找直方图中面积最大的矩形的功能,如当给定直方图各小块的高度=
[2,1,5,6,2,3] ,返回10。
解题思路:传递一数组a[]、长度;数组中存储各个柱形的高度。我们从0-N开始遍历,例如当前下标是i,初始化最大矩形的宽度height为1;从i-1到0遍历,[b]如果此柱形高度大于或等于a[i];则height++;否则break;同理在i+1到N-1遍历。最后矩形的面积为a[i]*height;具体实现代码如下:[/b]
[2,1,5,6,2,3] ,返回10。
解题思路:传递一数组a[]、长度;数组中存储各个柱形的高度。我们从0-N开始遍历,例如当前下标是i,初始化最大矩形的宽度height为1;从i-1到0遍历,[b]如果此柱形高度大于或等于a[i];则height++;否则break;同理在i+1到N-1遍历。最后矩形的面积为a[i]*height;具体实现代码如下:[/b]
#include<stdio.h> int largestRectangleArea(int a[],int n) { int height=0; int width; int max=0; for(int i=0;i<n;i++) { width=1; height=a[i]; for(int j=i-1;j>=0;j--) { if(a[j]>=height) width++; else break; } for(int k=i+1;k<n;k++) { if(a[k]>=height) width++; else break; } if(height*width>max) max=height*width; } return max; } int main() { int a[6]={2,1,5,6,2,3}; printf("%d",largestRectangleArea(a,6)); return 1; }
相关文章推荐
- 庞果英雄会---寻找直方图中面积最大的矩形---编程挑战
- [算法]CSDN编程挑战赛之寻找直方图中面积最大的矩形
- [算法]CSDN编程挑战赛之寻找直方图中面积最大的矩形
- 庞果英雄会---寻找直方图中面积最大的矩形---编程挑战
- 挑战编程:直方图中获取最大矩形面积
- 寻找直方图中面积最大的矩形
- 庞果网之寻找直方图中面积最大的矩形
- 寻找直方图中面积最大的矩形
- 寻找直方图中面积最大的矩形
- 寻找直方图中面积最大的矩形 --- 庞果网
- 寻找直方图中面积最大的矩形
- 寻找直方图中面积最大的矩形
- 知识整理——寻找直方图中面积最大的矩形
- 寻找直方图中面积最大的矩形
- 寻找直方图中面积最大的矩形 --- 庞果网
- Leetcode编程练习二:求直方图中矩形最大面积
- 寻找直方图中面积最大的矩形
- 寻找直方图中面积最大的矩形
- 寻找直方图中面积最大的矩形--英雄会
- 寻找直方图中面积最大的矩形(C语言版)