📣 独立日限时特惠: VIP通行证立减$68
12
返回列表 发新帖
楼主: WhatsFLAG
跳转到指定楼层
上一主题 下一主题
收起左侧

谷歌经典面试题 1cm水滴 1M范围 随机覆盖 直到全覆盖

🔗
pushazhiniao 2016-9-17 09:20:07 | 只看该作者
全局:
WhatsFLAG 发表于 2016-9-17 05:28
感谢您的细心回答,现在根据您给出的答案,大致判断是一个模拟随机的过程,我做题一般有个“陋习”就是稍 ...

monte carlo
回复

使用道具 举报

🔗
pushazhiniao 2016-9-17 09:23:46 | 只看该作者
全局:
gaocan1992 发表于 2016-9-17 08:21
你好强,好多面筋我都没看过哎。你拿到了么

谬赞 只是一枚小**
回复

使用道具 举报

🔗
citynart 2016-9-17 11:15:08 | 只看该作者
全局:

感觉你们面的都是面筋,我的都不是。。。默默哭泣
回复

使用道具 举报

🔗
pushazhiniao 2016-9-17 12:39:53 | 只看该作者
全局:
gaocan1992 发表于 2016-9-17 11:15
感觉你们面的都是面筋,我的都不是。。。默默哭泣

我也不是啊 并且录不录跟是不是完全不成正比
回复

使用道具 举报

🔗
citynart 2016-9-17 15:08:00 | 只看该作者
全局:
pushazhiniao 发表于 2016-9-16 20:39
我也不是啊 并且录不录跟是不是完全不成正比

这是什么说法啊,求解释
回复

使用道具 举报

🔗
ryancooper 2016-9-17 15:49:39 | 只看该作者
全局:
gaocan1992 发表于 2016-9-17 15:08
这是什么说法啊,求解释

为什么要依赖面经,我觉得面经的作用是让你看看会出什么类型的问题而不是让你记住这道题的答案。只要掌握好分析方法,题目你基本都能找到切入点。面试不只是看做不做得出,还看你是怎么分析问题的。
回复

使用道具 举报

🔗
wtcupup 2016-9-17 17:12:32 | 只看该作者
全局:
请教大神们,这样写对不对?
  1. public class Solution {

  2.         // Definition for an interval.
  3.         class Interval {
  4.                 int start;
  5.                 int end;

  6.                 Interval() {
  7.                         start = 0;
  8.                         end = 0;
  9.                 }

  10.                 Interval(int s, int e) {
  11.                         start = s;
  12.                         end = e;
  13.                 }
  14.         }

  15.         public int rainDrop() {

  16.                 List<Interval> q = new ArrayList<Interval>();
  17.                 q.add(new Interval(0, 100));
  18.                 int count = 0;
  19.                 while (!q.isEmpty()) {
  20.                         int size = q.size();
  21.                         for (int i = 0; i < size; i++) {
  22.                                 count++;
  23.                                 Interval current = q.get(i);
  24.                                 // Create random number 0 - 99
  25.                                 Random random = new Random();
  26.                                 // this point is always the left boundary of the rain drop, in
  27.                                 // this case, we can make sure it only moves in right direction
  28.                                 int raindrop = random.nextInt(100);
  29.                                 // the rain drop is 1cm long
  30.                                 int raindrop_start = raindrop, randrop_end = raindrop + 1;
  31.                                 int left = current.start, right = current.end;
  32.                                 if (raindrop_start > right || randrop_end < left) {
  33.                                         continue;
  34.                                 } else {
  35.                                         q.remove(i);
  36.                                         if (raindrop_start > left)
  37.                                                 q.add(new Interval(left, raindrop_start - 1));
  38.                                         if (randrop_end < right)
  39.                                                 q.add(new Interval(randrop_end, right));
  40.                                         break;
  41.                                 }
  42.                         }
  43.                 }
  44.                 return count;
  45.         }

  46.         public static void main(String[] args) {
  47.                 Solution s = new Solution();
  48.                 System.out.println(s.rainDrop());
  49.         }
  50. }
复制代码
回复

使用道具 举报

🔗
citynart 2016-9-18 01:44:27 | 只看该作者
全局:
ryancooper 发表于 2016-9-16 23:49
为什么要依赖面经,我觉得面经的作用是让你看看会出什么类型的问题而不是让你记住这道题的答案。只要掌握 ...

并没有依赖面筋,也没有背答案啊。但是既然有面筋,碰到了就更好啊
回复

使用道具 举报

🔗
stellari 2016-9-18 13:00:38 | 只看该作者
全局:
WhatsFLAG 发表于 2016-9-17 05:28
感谢您的细心回答,现在根据您给出的答案,大致判断是一个模拟随机的过程,我做题一般有个“陋习”就是稍 ...

你可以这样考虑。用厘米作单位,路面的范围是[0 100],那么雨点中心左标的可能范围是[-0.5, 100.5]。

那么第一滴雨的中心如果落在[0.5, 99.5]这个范围内,那么就会恰好覆盖长为1厘米的路面,这件事发生的概率是(99.5-0.5)/(100.5-(-0.5)) = 99/101。而如果落在其余范围内,覆盖的面积从0~1等概率均匀分布。这些事件加起来的总概率是1 - 99/101 = 2/101,。因此,第一滴雨落下后,覆盖面积的期望是99/101 X 1cm + 2/101 x 0.5 = 99/101 + 1/101 = 100/101。

反过来想,也就是说平均要下101/100滴雨,才能正好覆盖1cm的路面。

当恰好1cm的路面被覆盖以后,这时路面上有99cm未被覆盖。上面我们说了,100cm未被覆盖的情况下,有99/101的概率会覆盖1cm。那么99cm未覆盖的情况下,则有98/101的概率会覆盖1cm,剩下有2/101的情况依然是从覆盖0~1cm之间等概率分布,那么此时覆盖面积的期望是98/101 x 1cm + 2/101* 0.5 = 99/101.

换言之,从1cm覆盖到2cm覆盖这个过程,又平均需要101/99滴雨。

……

那么,从99cm覆盖到100cm覆盖,平均需要101滴雨。

因此,整个过程平均需要101/99+101/98+...101/2+101 = 524滴雨。

回复

使用道具 举报

🔗
 楼主| WhatsFLAG 2016-9-20 02:56:24 | 只看该作者
全局:
stellari 发表于 2016-9-18 13:00
你可以这样考虑。用厘米作单位,路面的范围是[0 100],那么雨点中心左标的可能范围是[-0.5, 100.5]。

...

分析的很棒!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表