数据结构Stack实例(二):求矩形最大面积
来源:互联网 发布:嵌入式与单片机的关系 编辑:程序博客网 时间:2024/03/29 04:29
For example, Given height = [2,1,5,6,2,3], return 10.
分析:使用一个栈的O(n)解法,代码非常简洁,栈内存储的是高度递增的下标。对于每一个直方图高度,分两种情况。1:当栈空或者当前高度大于栈顶下标所指示的高度时,
当前下标入栈。否则,2:当前栈顶出栈,并且用这个下标所指示的高度计算面积。而这个方法为什么只需要一个栈呢?因为当第二种情况时,for循环的循环下标回退,
也就让下一次for循环比较当前高度与新的栈顶下标所指示的高度,注意此时的栈顶已经改变由于之前的出栈。
实现代码:
/**
* @Title: MaxRecragle.java
* @Package stack
* @Description: TODO
* @author peidong
* @date 2017-5-3 上午9:29:07
* @version V1.0
*/
package stack;
import java.util.Stack;
public class MaxRecragle {
/**
*
* @Title: largestRectangleArea
* @Description: 利用栈求矩形最大面积
* @param @param height
* @param @return
* @return int
* @throws
*/
public static int largestRectangleArea(int[] height){
//面积初始化
int area = 0;
//初始化栈
Stack<Integer> stack = new Stack<Integer>();
for(int i = 0; i< height.length; i++){
if(stack.empty() || height[stack.peek()] < height[i]){
stack.push(i);
}else{
int start = stack.pop();
int width = stack.empty()?i:i - stack.peek() -1;
area = Math.max(area, height[start]*width);
i--;
}
}
while(!stack.empty()){
int start = stack.pop();
int width = stack.empty()?height.length:height.length - stack.peek() -1;
area = Math.max(area, height[start]*width);
}
return area;
}
/**
* @Title: main
* @Description: TODO
* @param @param args
* @return void
* @throws
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] array = {2, 1, 5, 6, 2, 3};
int area = largestRectangleArea(array);
System.out.println("最大的矩形面积是:"+area);
}
}
- 数据结构Stack实例(二):求矩形最大面积
- 求最大矩形面积
- Leetcode编程练习二:求直方图中矩形最大面积
- 柱状图求最大矩形面积
- (二)矩形类求面积
- 求直方图中最大矩形面积(C语言实现)
- 求柱状统计图里最大矩形面积
- 编程求直方图中的最大矩形面积
- 求直方图中最大矩形面积
- poj 2559 求连续的最大矩形面积(也可用于ccf最大连续矩形面积)
- HDU 1056 Largest Rectangle in a Histogram(dp)(求最大的矩形面积)
- 关于求一段最大的连续矩形面积
- 【POJ 1964】求10图矩形最大面积
- poj 1964 DP 求最大子矩形面积
- 最大连续矩形面积(栈实现)
- 找出最大矩形面积(枚举)
- poj2559(单调栈)最大矩形面积
- 最大矩形面积问题
- 友盟推送SDK常见问题总结
- 拷贝A下面的B目录到C下面,只拷贝目标结构,不拷贝文件
- 求一年的第几天
- 为什么你不用某某更现代化的语言重写所有代码
- MyBatis参数设置
- 数据结构Stack实例(二):求矩形最大面积
- Spark join问题
- sqlmap的应用实战
- Java设计模式
- LLDB的简单使用
- bootstrapValidator插件动态添加和移除校验
- JPAd的应用
- Podfile里的配置
- 导出table列表数据到excel(第5种方法适用多个浏览器)