avatar
死于google map# Joke - 肚皮舞运动
v*d
1
Maximal Rectangle
Given a 2D binary matrix filled with 0's and 1's, find the largest rectangl
e containing all ones and return its area.
有没有 O(N^2) 或者 O(N^3)的solution?
DP我只做出O(N^4). 暴力的话是 O(N^6).
avatar
s*t
2
考古没考到。我印象里好象amex在收到卡前就可以问客服要卡号和信息,在网上使用。
请问chase的卡可以吗?要买个大件,正好想用一张新开还没收到的chase卡,谢谢
avatar
f*e
3
可怜的小鹿斑比
据说google map已经把证据去掉了
avatar
m*g
4
has O(n**2) solution.
just search it.
avatar
G*r
5
纯黑幽默
avatar
S*h
6
这种题目要让现场写我觉得考官只是想看看你的思路,并不需要Optimal solution,真
的说了最优解,肯定要写bug free code,明显做过么

【在 m*****g 的大作中提到】
: has O(n**2) solution.
: just search it.

avatar
i*a
7
Don't see it on google map ah.
[发表自未名空间手机版 - m.mitbbs.com]
avatar
p*2
8
我刚写了一个N^3的。N^2还没研究。觉得太难了。
public int maximalRectangle(char[][] matrix)
{
if (matrix == null || matrix.length == 0)
return 0;
int n = matrix.length;
int m = matrix[0].length;
int[][] dp = new int[n][m];
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
{
if (matrix[i][j] == '1')
dp[i][j] = j > 0 ? dp[i][j - 1] + 1 : 1;
}
int max = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
{
if (matrix[i][j] == '1')
{
int k = i;
int min = dp[i][j];
while (k >= 0 && matrix[k][j] == '1')
{
min = Math.min(min, dp[k][j]);
max = Math.max(max, min * (i - k + 1));
k--;
}
}
}
return max;
}
avatar
l*x
9
以前看到google map车到in and out 的 drive through 买汉堡吃的图。
avatar
l*8
10
dp[i][j - 1] 是不是会下标越界?

【在 p*****2 的大作中提到】
: 我刚写了一个N^3的。N^2还没研究。觉得太难了。
: public int maximalRectangle(char[][] matrix)
: {
: if (matrix == null || matrix.length == 0)
: return 0;
: int n = matrix.length;
: int m = matrix[0].length;
: int[][] dp = new int[n][m];
: for (int i = 0; i < n; i++)
: for (int j = 0; j < m; j++)

avatar
z*n
11
有O(n2)的算法
leetcode上Largest Rectangle in Histogram这道题有O(n)的算法,对这个矩阵每行这
么计算一下就可以了。
avatar
p*2
12

为啥呀?

【在 l*********8 的大作中提到】
: dp[i][j - 1] 是不是会下标越界?
avatar
l*8
13
哦,你做了判断的。

【在 p*****2 的大作中提到】
:
: 为啥呀?

avatar
v*d
14
是个巧妙的解法。
不过转换成Largest Rectangle in Histogram,每行每个坐标上
的y值都要计算一下吧?这样每行是不是O(n)解决不了?n行也就
不能n^2呢?

【在 z********n 的大作中提到】
: 有O(n2)的算法
: leetcode上Largest Rectangle in Histogram这道题有O(n)的算法,对这个矩阵每行这
: 么计算一下就可以了。

avatar
p*2
15

pre process一下。 有时间我也练练。

【在 v********d 的大作中提到】
: 是个巧妙的解法。
: 不过转换成Largest Rectangle in Histogram,每行每个坐标上
: 的y值都要计算一下吧?这样每行是不是O(n)解决不了?n行也就
: 不能n^2呢?

avatar
v*c
16
每行的y值根据上一行的y值很容易就算出来了呀

【在 v********d 的大作中提到】
: 是个巧妙的解法。
: 不过转换成Largest Rectangle in Histogram,每行每个坐标上
: 的y值都要计算一下吧?这样每行是不是O(n)解决不了?n行也就
: 不能n^2呢?

avatar
v*d
17
果然巧妙

【在 v****c 的大作中提到】
: 每行的y值根据上一行的y值很容易就算出来了呀
avatar
p*2
18
写了一个N^2的。
public int maximalRectangle(char[][] matrix)
{
if(matrix==null || matrix.length==0)
return 0;

int m=matrix.length;
int n=matrix[0].length;

int[] height=new int[n];
int max=0;
for(int i=0;i{
for(int j=0;jif(matrix[i][j]=='1')
height[j]++;
else
height[j]=0;

max=Math.max(max,largestRectangleArea(height));
}

return max;
}

public int largestRectangleArea(int[] height)
{
class Ele
{
int id;
int height;
public Ele(int _id, int _height)
{
id = _id;
height = _height;
}
}

int max = 0;
Stack stack = new Stack();
int i = 0;
for (i = 0; i < height.length; i++)
{
if (stack.isEmpty() || stack.peek().height < height[i])
stack.add(new Ele(i, height[i]));
else if (stack.peek().height > height[i])
{
int prev = 0;
while (!stack.empty() && stack.peek().height > height[i])
{
Ele e = stack.pop();
max = Math.max(max, e.height * (i - e.id));
prev = e.id;
}
stack.add(new Ele(prev, height[i]));
}
}
while (!stack.empty())
{
Ele e = stack.pop();
max = Math.max(max, e.height * (i - e.id));
}
return max;
}
avatar
C*U
19
转化成直方图到还是可以想到的
但是O(N)时间这个比较难想到了
avatar
l*o
20
O(N^2)很好写。 过了small case, large case 超时。代码如下。 可以更优化一点,
但是懒得写了。 求牛人给O(N)解法。
public int largestRectangleArea(int[] height) {
int max = 0;
for (int i = 0; i < height.length; i++) {
int[] minHeight = new int[height.length];
for (int j = i; j < height.length; j++)
minHeight[j] = Integer.MAX_VALUE;
minHeight[i] = height[i];
max = Math.max(height[i], max);
for (int j = i + 1; j < height.length; j++) {
minHeight[j] = Math.min(minHeight[j - 1], height[j]);
max = Math.max(minHeight[j] * (j - i + 1), max);
}
}
return max;
}
avatar
c*t
21
我收藏的link,还没好好研究呢。
http://www.drdobbs.com/database/the-maximal-rectangle-problem/1

rectangl

【在 v********d 的大作中提到】
: Maximal Rectangle
: Given a 2D binary matrix filled with 0's and 1's, find the largest rectangl
: e containing all ones and return its area.
: 有没有 O(N^2) 或者 O(N^3)的solution?
: DP我只做出O(N^4). 暴力的话是 O(N^6).

avatar
i*e
23
btw 这道题 O(N^3) 就能过 large case。
面试时没人expect 你能写出 O(N^2) 的解法,那个太难了。
能写出 O(N^3) 的解法已经非常好了。
avatar
w*x
24
这题程序写起来真不容易啊, 面试遇到这题就挂了啊~~~~
const int M = 5;
const int N = 5;
int GetMaxRect(int A[M][N])
{
int B[M][N] = { 0 };
for (int i = 0; i < M; i++)
{
for (int j = 0; j < N; j++)
{
if (1 == A[i][j])
B[i][j] = i == 0 ? 1 : (B[i-1][j] + 1);
}
}
int nMaxRect = 0;
for (int i = 0; i < M; i++)
{
for (int j = i; j < M; j++)
{
int x = j - i + 1;
int nCurLen = 0;
int nMaxLen = 0;
for (int k = 0; k < N; k++)
{
if (B[j][k] >= x)
{
nCurLen++;
nMaxLen = max(nMaxLen, nCurLen);
}
else nCurLen = 0;
}
nMaxRect = max(nMaxRect, nMaxLen*(j - i + 1));
}
}
return nMaxRect;
}
avatar
l*b
25
假设1至少占整个矩阵的0

,最右,最上最下的那个1就好了。

rectangl

【在 v********d 的大作中提到】
: Maximal Rectangle
: Given a 2D binary matrix filled with 0's and 1's, find the largest rectangl
: e containing all ones and return its area.
: 有没有 O(N^2) 或者 O(N^3)的solution?
: DP我只做出O(N^4). 暴力的话是 O(N^6).

avatar
r*m
26
支持这个!跟咱写的几乎一样~ yeah!

【在 p*****2 的大作中提到】
: 写了一个N^2的。
: public int maximalRectangle(char[][] matrix)
: {
: if(matrix==null || matrix.length==0)
: return 0;
:
: int m=matrix.length;
: int n=matrix[0].length;
:
: int[] height=new int[n];

avatar
l*b
27
O(n), 不可能吧,n x n矩阵里只有一个1, 必须遍历才能确定。

【在 C***U 的大作中提到】
: 转化成直方图到还是可以想到的
: 但是O(N)时间这个比较难想到了

avatar
f*e
28
当年小尾羊都讨论烂了的题目。

【在 l*******b 的大作中提到】
: O(n), 不可能吧,n x n矩阵里只有一个1, 必须遍历才能确定。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。