leetCode 84. Largest Rectangle in Histogram
来源:互联网 发布:vb控件加到窗体上 编辑:程序博客网 时间:2024/05/21 22:36
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.
返回直方图最大矩形
本来用动态规划做,但是超时了
public static int largestRectangleArea(int[] heights) { if(heights==null||heights.length<1)return 0; int n=heights.length; int dp[][]=new int [n+1][n+1]; int min[][]=new int [n+1][n+1]; int max=0; for(int i=1;i<=n;i++){ min[i][i]=heights[i-1]; dp[i][i]=heights[i-1]; if(heights[i-1]>max) max=heights[i-1]; } for(int i=1;i<=n;i++){ for(int j=i+1;j<=n;j++){ min[i][j]=heights[j-1]<min[i][j-1]?heights[j-1]:min[i][j-1]; } } for(int i=1;i<=n;i++){ for(int j=i+1;j<=n;j++){ if(dp[i][j-1]>max){ max=dp[i][j-1]; } if(min[i][j-1]>=heights[j-1]){ int temp=heights[j-1]*(j-i+1); dp[i][j]=temp; if(temp>max){ max=heights[j-1]*(j-i+1); } } else{ int temp=min[i][j-1]*(j-i+1); if(temp>dp[i][j]){ dp[i][j]=temp; if(temp>max) max=temp; } } } } return max; }
能通过的是参考网上的用栈的方法解决的,思路看这里
public static int largestRectangleArea(int[] heights) { if(heights==null||heights.length<1)return 0; int n=heights.length; if(n==1)return heights[0]; int max=0; Stack<Integer> st = new Stack<Integer>(); st.push(heights[0]); int i=1; while(i<n){ if(heights[i]>=st.peek()){ st.push(heights[i]); } else{ int count1=1; while(!st.isEmpty()&&st.peek()>heights[i]){ int temp=st.pop(); if(count1*temp>max){ max=count1*temp; } count1++; } while(count1-->0){ st.push(heights[i]); } } i++; } int count1=1; while(!st.isEmpty()){ int temp=st.pop(); if(count1*temp>max){ max=count1*temp; } count1++; } return max; }
阅读全文
0 0
- [Leetcode] 84. Largest Rectangle in Histogram
- LeetCode --- 84. Largest Rectangle in Histogram
- [LeetCode]*84.Largest Rectangle in Histogram
- [leetcode] 84.Largest Rectangle in Histogram
- [leetcode] 84. Largest Rectangle in Histogram
- Leetcode 84. Largest Rectangle in Histogram
- **LeetCode 84. Largest Rectangle in Histogram
- leetcode 84. Largest Rectangle in Histogram
- leetcode 84. Largest Rectangle in Histogram
- 【leetcode】84. Largest Rectangle in Histogram
- LeetCode 84. Largest Rectangle in Histogram
- LeetCode-84.Largest Rectangle in Histogram
- leetcode.84. Largest Rectangle in Histogram
- [leetcode] 【栈】 84. Largest Rectangle in Histogram
- Leetcode 84. Largest Rectangle in Histogram
- [LeetCode] 84. Largest Rectangle in Histogram
- LeetCode 84. Largest Rectangle in Histogram
- leetcode 84. Largest Rectangle in Histogram
- Cannot resolve corresponding JNI function Java_com_keepassdroid_crypto native_AesCipherSPI_Update Re
- 电脑开机显示器无信号问题(亲测有效)
- Appcan页面学习小结
- 三.散列表(哈希表)原理
- 经典角色权限系统设计五张表及拓展应用
- leetCode 84. Largest Rectangle in Histogram
- jquery设置checked及复选框 多个提交
- 【NOIP模板】 树状数组
- 【Spring in action】SpringMVC基于xml及java配置的简单运用
- 【安卓学习之常见问题】 apk崩溃,找不到so文件(dex file "couldn't find "libSDL.so)
- API Hook
- Java数据结构与算法之树_动力节点Java学院整理
- 常用的可视化数据展示工具有哪些
- Hdu 5405 Sometimes Naive 树链剖分+线段树