Leetcode刷题记—— 84. Largest Rectangle in Histogram(柱形图中最大矩形面积)
来源:互联网 发布:js获取input file对象 编辑:程序博客网 时间:2024/05/22 19:57
一、题目叙述:
Given n non-negative integers representing the histogram's bar height where the width of each bar is 1, find the area of largest rectangle in the histogram.
Above is a histogram where width of each bar is 1, given height = [2,1,5,6,2,3]
.
The largest rectangle is shown in the shaded area, which has area = 10
unit.
For example,
Given heights = [2,1,5,6,2,3]
,
return 10
.
Subscribe to see which companies asked this question.
二、解题思路:
分两种情况。1:当栈空或者当前高度大于栈顶下标所指示的高度时,当前下标入栈。否则,2:当前栈顶出栈,并且用这个下标所指示的高度计算面积。而这个方法为什么只需要一个栈呢?因为当第二种情况时,for循环的循环下标回退,也就让下一次for循环比较当前高度与新的栈顶下标所指示的高度,注意此时的栈顶已经改变由于之前的出栈。
三、源码:
1、参考:
import java.util.LinkedList;public class Solution {public int largestRectangleArea(int[] height) { // Start typing your Java solution below // DO NOT write main() function int area = 0; java.util.Stack<Integer> stack = new java.util.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;} public static void main(String args[]) { // int[] digits = {0}; Solution solution = new Solution(); int[] abc = {2,1,5,6,2,3}; // for(int i = 0; i < abc.length; i ++) System.out.print(solution.largestRectangleArea(abc)); } }
2、超时:
import java.util.LinkedList;public class Solution { public int largestRectangleArea(int[] heights) { int result = 0; LinkedList<Integer> stack = new LinkedList<Integer>(); for (int i = 0; i < heights.length; i++) { if (stack.isEmpty() || stack.getLast() <= heights[i]) stack.add(heights[i]); else { int count = 0; while (!stack.isEmpty() && stack.getLast() > heights[i]) { count ++; //if (stack.getLast() * count > result) result = Math.max(result, stack.getLast() * count); //result = ; stack.removeLast(); } for (int j = 0; j < count; j++) stack.add(heights[i]); stack.add(heights[i]); } } for (int i = 0; i < heights.length; i ++) { result = Math.max(result, stack.get(i) * (heights.length - i)); } return result; } public static void main(String args[]) { // int[] digits = {0}; Solution solution = new Solution(); int[] abc = {2,1,5,6,2,3}; // for(int i = 0; i < abc.length; i ++) System.out.print(solution.largestRectangleArea(abc)); } }
0 0
- Leetcode刷题记—— 84. Largest Rectangle in Histogram(柱形图中最大矩形面积)
- [LeetCode]—Largest Rectangle in Histogram 求直方图最大填充矩形面积
- LeetCode 84. Largest Rectangle in Histogram(最大矩形)
- Leetcode 84. Largest Rectangle in Histogram 最大矩形 解题报告
- LeetCode 84. Largest Rectangle in Histogram(直方图最大矩形)
- 栈——largest-rectangle-in-histogram求柱形图中的最大矩形面积
- Largest Rectangle in Histogram 直方图中最大的矩形面积
- Largest Rectangle in Histogram 一排矩形中的最大的面积
- 最大矩形面积 84 largest rectangle in histogram
- 柱状图内最大的矩形面积 Largest Rectangle in Histogram @LeetCode
- LeetCode | Largest Rectangle in Histogram(直方图围城的最大矩形面积)
- [C++]LeetCode: 133 Largest Rectangle in Histogram(最大矩形面积)
- LeetCode: Largest Rectangle in Histogram(直方图最大面积)
- Largest Rectangle in Histogram (直方图中最大面积) 【leetcode】
- 4.1.3LeetCode: Largest Rectangle in Histogram(直方图最大面积)
- (每日算法)Leetcode -- Largest Rectangle in Histogram(最大实心矩形)
- [Leetcode] largest rectangle in histogram 直方图中最大的矩形
- Largest Rectangle in Histogram(在柱形图中画出最大矩形)
- Codeforces 548C
- Vue.js学习系列(二)---配置开发环境
- [算法系列之十八]海量数据处理之BitMap
- 数据库和持久化方案
- 读QT5.7源码(四)QMetaMethod 和 QMetaMethodPrivate
- Leetcode刷题记—— 84. Largest Rectangle in Histogram(柱形图中最大矩形面积)
- CS0122号错误是什么
- Android 获取所有联系人(两种方法)
- 洛谷 P1045 麦森数
- HTML5和CSS常用标签
- 安卓-获取全局上下文
- Android studio 引入ButterKnife注解流程
- Android下设置CPU核心数和频率
- 调起手机软键盘点击搜索按键后触发搜索功能