由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 直方图盛水最大容量问题
相关主题
刚刚onsite G家,发面经求祝福问一道flg面试题
白板代码,直方图包含的最大矩形面积今早的G电面,郁闷坏了...
求Leetcode OJ Maximal Rectangle的n^2解法问一个题
解一道 GOOGLE 面试题 ...总结一道题
Maximal Rectangle O(mn) 解法 非 histogram一个老面试题
问个老算法题明天onsite却发现好多还没掌握啊
问道G题(2)最近大公司的面试题有不再偏难的趋势
发道面经攒人品ooyala,apple,ebay面经
相关话题的讨论汇总
话题: int话题: left话题: water话题: total话题: right
进入JobHunting版参与讨论
1 (共1页)
x***i
发帖数: 64
1
原来在版里看到过code,现在找不到了。哪位好心可以再贴一下吗?
f*******t
发帖数: 7549
2
int water(int * a, int n) {
stack > mystack;
int water = 0;

for(int i = 0; i while(!mystack.empty() && mystack.top().second <= a[i]) {
int bottom = mystack.top().second;
mystack.pop();
if( mystack.empty())
break;
int top = mystack.top().second < a[i]? mystack.top().second: a[i];
int length = i - mystack.top().first - 1;
water = water + (top-bottom)* length;
}
mystack.push(make_pair(i, a[i]));
}

return water;
}
x***i
发帖数: 64
3
多谢多谢。。。
除了大小比较和边界处理不一样,算法和最大rectangle一致。
http://wansishuang.appspot.com/?p=3002

【在 f*******t 的大作中提到】
: int water(int * a, int n) {
: stack > mystack;
: int water = 0;
:
: for(int i = 0; i: while(!mystack.empty() && mystack.top().second <= a[i]) {
: int bottom = mystack.top().second;
: mystack.pop();
: if( mystack.empty())
: break;

g**********y
发帖数: 14569
4
G的标准解法是:找到最高的bar, 分别算左边和右边,那个解写起来长一点,但是解释
简单,不容易错。
public int hold2(int[] a) {
int h = 0;
int N = a.length;
for (int i=1; i a[h]) h = i;

int total = 0;
int left = a[0];
for (int i=1; i if (a[i] > left) {
left = a[i];
}
else {
total += left - a[i];
}
}

int right = a[N-1];
for (int i=N-2; i>h; i--) {
if (a[i] > right) {
right = a[i];
}
else {
total += right - a[i];
}
}

return total;
}

【在 f*******t 的大作中提到】
: int water(int * a, int n) {
: stack > mystack;
: int water = 0;
:
: for(int i = 0; i: while(!mystack.empty() && mystack.top().second <= a[i]) {
: int bottom = mystack.top().second;
: mystack.pop();
: if( mystack.empty())
: break;

I***A
发帖数: 6
5
能不能讲讲具体的题目啊? 考古了一下,但没有找到具体的描述; 那位大虾给
讲讲,谢谢!
f*******t
发帖数: 7549
6
这个好

【在 g**********y 的大作中提到】
: G的标准解法是:找到最高的bar, 分别算左边和右边,那个解写起来长一点,但是解释
: 简单,不容易错。
: public int hold2(int[] a) {
: int h = 0;
: int N = a.length;
: for (int i=1; i a[h]) h = i;
:
: int total = 0;
: int left = a[0];
: for (int i=1; i
f*******t
发帖数: 7549
7
一个表示直方图高度的数组,每格宽度为1,求能蓄多少水。
比如数组[1, 0, 1]能蓄1单位水,[2, 1, 0, 2]能蓄3单位。

【在 I***A 的大作中提到】
: 能不能讲讲具体的题目啊? 考古了一下,但没有找到具体的描述; 那位大虾给
: 讲讲,谢谢!

Y**B
发帖数: 144
8
直方图最大矩形和最大蓄水什么关系? 怎么个蓄水法?
A**u
发帖数: 2458
9
有没有分治解法

【在 x***i 的大作中提到】
: 多谢多谢。。。
: 除了大小比较和边界处理不一样,算法和最大rectangle一致。
: http://wansishuang.appspot.com/?p=3002

k****n
发帖数: 369
10
这题最快就是O(n),分治也不可能比这个快了

【在 A**u 的大作中提到】
: 有没有分治解法
相关主题
问个老算法题问一道flg面试题
问道G题(2)今早的G电面,郁闷坏了...
发道面经攒人品问一个题
进入JobHunting版参与讨论
m*****k
发帖数: 731
11
http://tech-queries.blogspot.com/2011/03/maximum-area-rectangle
异曲同工.

【在 k****n 的大作中提到】
: 这题最快就是O(n),分治也不可能比这个快了
A**u
发帖数: 2458
12
大牛 能不能讲解一下
这个算法为啥是对的? 我看不懂.
假设栈里元素为 AB. (B>A)。
读入C, C < A
那么 AB 都pop出.
难道不存在这样的可能性吗: 将来某个时候,可以以A开头,形式最大的面积?

【在 k****n 的大作中提到】
: 这题最快就是O(n),分治也不可能比这个快了
k*n
发帖数: 150
13
我的解法跟堆栈没关系
就是从左边和右边分别扫描一遍
记录迄今为止的最大值就可以了

【在 A**u 的大作中提到】
: 大牛 能不能讲解一下
: 这个算法为啥是对的? 我看不懂.
: 假设栈里元素为 AB. (B>A)。
: 读入C, C < A
: 那么 AB 都pop出.
: 难道不存在这样的可能性吗: 将来某个时候,可以以A开头,形式最大的面积?

A**u
发帖数: 2458
14
你的解法在哪呢
贴出来,学习学习

【在 k*n 的大作中提到】
: 我的解法跟堆栈没关系
: 就是从左边和右边分别扫描一遍
: 记录迄今为止的最大值就可以了

Y**B
发帖数: 144
15
2,1,0,2 为啥是3????

【在 f*******t 的大作中提到】
: 一个表示直方图高度的数组,每格宽度为1,求能蓄多少水。
: 比如数组[1, 0, 1]能蓄1单位水,[2, 1, 0, 2]能蓄3单位。

H***e
发帖数: 476
16
喔。名白了。
是用每个 小矩阵得夹缝盛水

【在 Y**B 的大作中提到】
: 2,1,0,2 为啥是3????
s******n
发帖数: 3946
17
显然不对啊,假设a[0]=a[1]=...=a[N]=10,你程序出来结果是0

【在 g**********y 的大作中提到】
: G的标准解法是:找到最高的bar, 分别算左边和右边,那个解写起来长一点,但是解释
: 简单,不容易错。
: public int hold2(int[] a) {
: int h = 0;
: int N = a.length;
: for (int i=1; i a[h]) h = i;
:
: int total = 0;
: int left = a[0];
: for (int i=1; i
H***e
发帖数: 476
18

本来就是0

【在 s******n 的大作中提到】
: 显然不对啊,假设a[0]=a[1]=...=a[N]=10,你程序出来结果是0
s******n
发帖数: 3946
19
能盛容量为0的水?

【在 H***e 的大作中提到】
: 晕
: 本来就是0

Y**B
发帖数: 144
20
0 1 0
是2还是0?
相关主题
总结一道题最近大公司的面试题有不再偏难的趋势
一个老面试题ooyala,apple,ebay面经
明天onsite却发现好多还没掌握啊顶风作案,Google面经
进入JobHunting版参与讨论
C***y
发帖数: 2546
21
谁能稍微解释一下题目?
没看明白要求

【在 x***i 的大作中提到】
: 原来在版里看到过code,现在找不到了。哪位好心可以再贴一下吗?
H***e
发帖数: 476
22
就是凹下去的才能盛水

【在 C***y 的大作中提到】
: 谁能稍微解释一下题目?
: 没看明白要求

C***y
发帖数: 2546
23
每个bar是连通的吗?

【在 H***e 的大作中提到】
: 就是凹下去的才能盛水
H***e
发帖数: 476
24
每个bar是不联通的,你把bar想象成实心的,上面盛水

【在 C***y 的大作中提到】
: 每个bar是连通的吗?
s******n
发帖数: 3946
25
ic

【在 H***e 的大作中提到】
: 每个bar是不联通的,你把bar想象成实心的,上面盛水
C***y
发帖数: 2546
26
明白了!
谢谢!

【在 H***e 的大作中提到】
: 每个bar是不联通的,你把bar想象成实心的,上面盛水
1 (共1页)
进入JobHunting版参与讨论
相关主题
ooyala,apple,ebay面经Maximal Rectangle O(mn) 解法 非 histogram
顶风作案,Google面经问个老算法题
问问题,0/1 矩阵内最大1矩阵的问题问道G题(2)
直方图下最大矩形问题 o(n) 解对吗?发道面经攒人品
刚刚onsite G家,发面经求祝福问一道flg面试题
白板代码,直方图包含的最大矩形面积今早的G电面,郁闷坏了...
求Leetcode OJ Maximal Rectangle的n^2解法问一个题
解一道 GOOGLE 面试题 ...总结一道题
相关话题的讨论汇总
话题: int话题: left话题: water话题: total话题: right