打印

网易二面面试题

[复制链接]
1531|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
baidudz|  楼主 | 2012-9-30 08:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一个小水滴,每滴一滴水,水滴就变大,当滴到5滴水的时候,这个有5滴水组成的水泡就破裂成4个小水滴往四个方向飞出去。
现有一二维数组,每个数组元素为0-4的整数,表示水滴大小,问怎样来找到一种方式,滴最少的水滴,使得数组清空,全为0。
数组中的元素0表示空,没有障碍的话。如果飞出去的小水滴碰到阻碍了,就融合了。如果木有碰到障碍的话,小水滴就一直不停止,就会飞出去了。

例如:
Sample 1:
000
040
000
滴一滴水就全部清空了


Sample 2:
000
041
000
如果中间滴一滴水的话,就会变成
000
002
000

问怎样来找到一种方式,滴最少的水滴,使得数组清空,全为0。

大家有什么比较好的思路和方法吗?
面试官要求当成写代码的。。。

相关帖子

沙发
pkat| | 2012-9-30 08:33 | 只看该作者
大致想了一下,似乎可以先遍历数组的每行每列,然后把每行每列所有的元素加起来,先选择和为4的倍数的行和列,每次清空一行或者一列之后就重新遍历,如果有两组以上满足4的倍数的,再根据细节判断优先级

只是大致的一个想法,可能不对,权当抛砖引玉吧~

使用特权

评论回复
板凳
txcy| | 2012-9-30 08:40 | 只看该作者
因为每个位置至少要超出了4才会清除,所以每次滴一滴水,在把所有的水滴清除之前,尽可能地少使水滴飞出去,而是让其尽可能的碰到障碍上,使障碍(水泡)向清除的方向发展。所以每次遍历,找最大并且其四个方向上障碍最多的元素加1,如果超出4就清除,并且四个方向上的元素也加1……这样递归下去。

使用特权

评论回复
地板
forrest11| | 2012-10-6 18:48 | 只看该作者
这样的题目真的很有意思。
我仔细考虑了一下。这个题目由于水滴溅出是四个方向相同,对称的。所以是从最中间开始滴水滴,让其均匀地向四周散开最好。这个中间点就是矩阵的重心点。问题就转换到找矩阵的重心点上来。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

239

主题

2284

帖子

0

粉丝