楼主: wolfenstorm
跳转到指定楼层
上一主题 下一主题
收起左侧

google 电面 跪经

🔗
 楼主| wolfenstorm 2017-12-6 00:16:17 | 只看该作者
全局:
b01501085 发表于 2017-12-5 12:29
請問樓主第一題是怎麼去random的呢?

我是用了java自带的random number generator,然后值的上线就是total population。每一次generate一个random number,然后每一个国家的population作为一个range,累加(用hash map 实现)。最后看这个random number在哪一个range就是哪一个国家 (这一步可以用二分优化)。
回复

使用道具 举报

🔗
Elina_huang 2017-12-6 11:17:24 | 只看该作者
全局:
是不会还需要递归来做呢?

补充内容 (2017-12-6 11:18):
第二轮的题是不是需要自顶向下的dp需要用递归来做?
回复

使用道具 举报

🔗
 楼主| wolfenstorm 2017-12-6 12:35:10 | 只看该作者
全局:
Elina_huang 发表于 2017-12-6 11:17
是不会还需要递归来做呢?

补充内容 (2017-12-6 11:18):

可以使用递归可以不用。我一开始想的最好写的是用的递归做dp,但是后来的memoization优化的版本是不用递归用循环的。
这个dp我的知识范围内只能从上到下做。
回复

使用道具 举报

🔗
Elina_huang 2017-12-6 22:37:53 | 只看该作者
全局:
yunjiezhang 发表于 2017-12-6 12:35
可以使用递归可以不用。我一开始想的最好写的是用的递归做dp,但是后来的memoization优化的版本是不用递 ...

你的memorization优化是怎么做的呢?可以详细说说嘛?
回复

使用道具 举报

🔗
 楼主| wolfenstorm 2017-12-7 02:15:04 | 只看该作者
全局:
Elina_huang 发表于 2017-12-6 22:37
你的memorization优化是怎么做的呢?可以详细说说嘛?

上面有个回复详细讲了一下,你先看一下那个吧。没看懂的话再回复我吧,我再想想别的讲法。
回复

使用道具 举报

🔗
reliveinfire 2017-12-7 11:44:54 | 只看该作者
全局:
yunjiezhang 发表于 2017-12-5 10:27
啊 没错。。诶。。我这脑子老出错。。
谢谢指出来

請問一下, 最後一輪需要odd/even相加嘛?
想法是能reach 到n 不是一定是odd (第一次丟嗎?)  還是我想錯了?

除了reach n 的一定是odd, 其他才都需要記錄 odd/even?

反過來觀察
odd: 1,2,4
even:1,3,4
考慮 n=6

top-down,
第一次丟 6  =  dp[5][0] + dp[4][0] + dp[2][0]
dp[5][0] = dp[4][1] + dp[2][1] + dp[1][1]
dp[4][0] = dp[3][1] + dp[1][1] + dp[0][1]
dp[2][0] = dp[1][1] + dp[-1][1] + dp[-2][1]

if i <= 0, dp[i][x] = 1
回复

使用道具 举报

🔗
 楼主| wolfenstorm 2017-12-7 11:49:47 | 只看该作者
全局:
reliveinfire 发表于 2017-12-7 11:44
請問一下, 最後一輪需要odd/even相加嘛?
想法是能reach 到n 不是一定是odd (第一次丟嗎?)  還是我想錯了 ...

诶。。你提出来了我也有点懵了。。所以觉得崩嘛。。最后算法都没想清楚代码也没写完。
貌似第n层出发的是算第一次下落。如果这样的话可能只要考虑 odd 情况,那你说的应该有道理。
如果你面试碰到的话建议你问问面试官问清楚啦,我这样半吊子的也不太好揣测面试官想要的代码算法是什么样的。。不好意思啦
回复

使用道具 举报

🔗
reliveinfire 2017-12-7 11:55:02 | 只看该作者
全局:
yunjiezhang 发表于 2017-12-7 11:49
诶。。你提出来了我也有点懵了。。所以觉得崩嘛。。最后算法都没想清楚代码也没写完。
貌似第n层出发的 ...

我也不太确定, 不过照这想法 你原本提出的作法好像是正确的.

所以想提出来讨论讨论.
回复

使用道具 举报

🔗
get_bits 2017-12-7 17:25:53 | 只看该作者
全局:
马克一下 谢谢楼主!
回复

使用道具 举报

🔗
twjeric 2017-12-10 06:44:49 | 只看该作者
全局:
写了个dp的,思路是从n开始往下跳,没test case不知道是不是对。。。

class Solution {
    public int jumpGround(int n, int[] sticky) {
        HashSet<Integer> set = new HashSet();
        for (int num : sticky)
            set.add(num);
        int[][] dp = new int[n+4][2];
        if (!set.contains(n)) dp[n][0] = 1;
        for (int i = n - 1; i > 0; i--) {
            if (set.contains(i)) continue;
            dp[i][0] = dp[i+1][1] + dp[i+3][1] + dp[i+4][1];
            dp[i][1] = dp[i+1][0] + dp[i+2][0] + dp[i+4][0];
        }
        int ans = 3 * (dp[1][0] + dp[1][1]);
        ans += 2 * (dp[2][0] + dp[2][1]);
        ans += (dp[3][0] + 2 * dp[3][1]);
        ans += (dp[4][0] + dp[4][1]);
        return ans;
    }
}
回复

使用道具 举报

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

本版积分规则

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