leetcode 最大矩形和
1.枚举法(超时)
public class Solution {
public int largestRectangleArea(int[] height) {
int max=-1;
for(int i=0;i<height.length;i++)
{
int len=1;
int k=i-1;
while(k>=0&&height[k]<=height[i])
{
k--;
len++;
}
k=i+1;
while(k<height.length&&height[k]<=height[i])
{
len++;
k++;
}
if(max<len)
{
max=len;
}
}
return max;
}
}
2.单调栈(AC),其实模拟了第一种方法,nyoj做过,效率为线性。写的代码有点长,但是很好理解
class node
{
int d; //di
int h;// higtht
} public class Solution {
public int largestRectangleArea(int[] height) {
int len=height.length;
if(len==0) return 0;
node n[]=new node[len];
for(int i=0;i<len;i++)
{
n[i]=new node();
n[i].d=1;
n[i].h=height[i]; }
Stack<node> s=new Stack<node>();
s.push(n[0]);
int max=n[0].h;
for(int j=1;j<len;j++)
{
node t=s.peek();
if(n[j].h>=t.h)
{
s.push(n[j]);
}
else
{
int with=0;
while(!s.isEmpty()&&s.peek().h>n[j].h)
{
t=s.pop();
with+=t.d;
if(with*t.h>max) max=with*t.h; }
n[j].d+=with;
s.push(n[j]); } }
int with=0;
while(!s.isEmpty())
{
node t=s.pop();
with=with+t.d;
int temp=t.h*with; if(temp>max) max=temp; } return max;
}}
3.最大01矩阵()。使用上述四项,枚举每一行。
class node
{
int d; //di
int h;// higtht
} public class Solution {
public int largest(int[] height) {
int len=height.length;
if(len==0) return 0;
node n[]=new node[len];
for(int i=0;i<len;i++)
{
n[i]=new node();
n[i].d=1;
n[i].h=height[i]; }
Stack<node> s=new Stack<node>();
s.push(n[0]);
int max=n[0].h;
for(int j=1;j<len;j++)
{
node t=s.peek();
if(n[j].h>=t.h)
{
s.push(n[j]);
}
else
{
int with=0;
while(!s.isEmpty()&&s.peek().h>n[j].h)
{
t=s.pop();
with+=t.d;
if(with*t.h>max) max=with*t.h; }
n[j].d+=with;
s.push(n[j]); } }
int with=0;
while(!s.isEmpty())
{
node t=s.pop();
with=with+t.d;
int temp=t.h*with; if(temp>max) max=temp; } return max;
}
public int maximalRectangle(char[][] matrix) {
if(matrix.length==0) return 0; int len=matrix[0].length;
int ans[]=new int[len];
for(int i=0;i<len;i++)
{
ans[i]=matrix[0][i]-'0';
}
int max=largest(ans); for(int i=1;i<matrix.length;i++)
{
for(int j=0;j<matrix[0].length;j++)
{
if(matrix[i][j]=='0') ans[j]=0; else
{
ans[j]+=1;
} } int t=largest(ans);
if(max<t) max=t; } return max; }
}
https://oj.leetcode.com/problems/maximal-rectangle/
leetcode 最大矩形和的更多相关文章
- LeetCode:矩形区域【223】
LeetCode:矩形区域[223] 题目描述 在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积. 每个矩形由其左下顶点和右上顶点坐标表示,如图所示. 示例: 输入: -3, 0, 3, 4, ...
- LeetCode子矩形查询
LeetCode 子矩形查询 题目描述 请你实现一个类SubrectangleQueries,它的构造函数的参数是一个rows * cols的矩形(这里用整数矩阵表示),并支持以下两种操作: upda ...
- LeetCode 223. 矩形面积(Rectangle Area)
223. 矩形面积 223. Rectangle Area 题目描述 在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积. 每个矩形由其左下顶点和右上顶点坐标表示,如图所示. LeetCode2 ...
- Leetcode 363.矩形区域不超过k的最大数值和
矩形区域不超过k的最大数值和 给定一个非空二维矩阵 matrix 和一个整数 k,找到这个矩阵内部不大于 k 的最大矩形和. 示例: 输入: matrix = [[1,0,1],[0,-2,3]], ...
- [LeetCode] 223.矩形面积
题目链接: https://leetcode-cn.com/problems/rectangle-area 难度:中等 通过率:41.3% 题目描述: 在 二维 平面上计算出两个 由直线构成的 矩形重 ...
- LeetCode 836. 矩形重叠
题目链接:https://leetcode-cn.com/problems/rectangle-overlap/ 矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左 ...
- Java实现 LeetCode 836 矩形重叠(暴力)
836. 矩形重叠 矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标. 如果相交的面积为正,则称两矩形重叠.需要明确的 ...
- Java实现 LeetCode 363 矩形区域不超过 K 的最大数值和
363. 矩形区域不超过 K 的最大数值和 给定一个非空二维矩阵 matrix 和一个整数 k,找到这个矩阵内部不大于 k 的最大矩形和. 示例: 输入: matrix = [[1,0,1],[0,- ...
- Java实现 LeetCode 223 矩形面积
223. 矩形面积 在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积. 每个矩形由其左下顶点和右上顶点坐标表示,如图所示. Rectangle Area 示例: 输入: -3, 0, 3, 4 ...
随机推荐
- TCP服务器端和客服端(一)
就是一个客服端(Socket)和服务器(ServerSocket)端的链接间.我的理解是一个服务端可以链接多个客服端. 在客服端有输入流outPutStream. 用于发送数据 在服务器端有输出流.i ...
- matlab中max的用法
C = max(A) 返回一个数组各不同维中的最大元素.如果A是一个向量,max(A)返回A中的最大元素.如果A是一个矩阵,max(A)将A的每一列作为一个向量,返回一行向量包含了每一列的最大元素. ...
- 基于shiro授权过程
1.对subject进行授权,调用方法isPermitted("permission串")2.SecurityManager执行授权,通过ModularRealmAuthorize ...
- oracle 过程函数,包的区别和联系
一.过程与函数区别 1.过程可以有0~N个返回参数,通过OUT or IN OUT参数返回:函数有且仅有1个返回值,通过return语句返回. 2.调用过程时,可做为单独的语句执行:调用函数时,函数必 ...
- 利用case when 减少表扫描次数
数据库环境:SQL SERVER 2008R2 有网友希望有人帮他优化一下他的SQL,SQL语句如下: WITH T AS ( SELECT B.O_Money MON,B.O_States STAT ...
- Angularjs总结(一)表单验证
常用的表单验证1.必须字段html5特性 增加required <input type="text" required /> 2.最小长度和最大长度 <input ...
- 校省选赛第一场C题解Practice
比赛时间只有两个小时,我没有选做这题,因为当时看样例也看不懂,比较烦恼. 后来发现,该题对输入输出要求很低.远远没有昨天我在做的A题的麻烦,赛后认真看了一下就明白了,写了一下,一次就AC了,没问题,真 ...
- 用3种方法在 operator= 中处理“自我赋值”
假设你建立一个class 用来保存一个指针指向一块动态分配的位图. class Bitmap {......}; class Widget{ ... private: Bitmap* pb ; }; ...
- php ob_ 开头的相关函数
<?phpbool ob_start([ callback $output_callback [, int $chunk_size [, bool $erase ]]]); /* 打开输出控制缓 ...
- WPF DataGrid 行头小三角
<DataTemplate x:Key="RowHeaderTemplate"> <StackPanel Orientation="Horizontal ...