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

狗狗跪经

全局:

2018(4-6月) 码农类General 硕士 全职@google - Other - 技术电面  | | Fail | 在职跳槽

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
周四电面了google,不出意料的跪了。互相介绍,然后google doc上开始做题:
第一题:
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies

真心不会,求地里各路大神指导指导。
哎,啥也别说接着刷题去了。。。

评分

参与人数 1大米 +2 收起 理由
咸蛋超人aka + 2 太有才了!

查看全部评分


上一篇:Affirm店面
下一篇:店面
全局:
假设 dp(nums, i, j)表示从index i开始,到index j 结束(两边都包括)的能拿到的最大值, sum(nums, i, j) 表示从i到j的和 (可以用presum求)
那么 dp(nums, i, j) = max( nums[i]+sum(nums, i+1, j) - dp(nums, i+1, j),     nums[j]+sum(nums, i, j-1) - dp(nums, i, j-1)) 分别表示我取第一个或者最后一个之后,对方也选取子问题最优解,那么我能拿到的就是sum-dp
出口是i==j的时候, 返回nums[i],  i>j自然就返回0啦
中间结果用二维数组存一下避免重复计算
最后问题求解的就是dp(nums, 0, len-1)吧
请指正
另外我一直在想这个问题数学上也没有办法用类似于奇偶性什么来求。。
回复

使用道具 举报

🔗
bambloo 2018-4-22 07:46:45 | 只看该作者
全局:
第二题大概思路应该是dfs+memo数组吧,感觉是minimax问题,对方拿的少,自己才能拿的多
回复

使用道具 举报

🔗
idatascience 2018-4-22 07:47:38 | 只看该作者
全局:
deepcopy其实就是每次都重新create一个list node,大概就是LinkedNode(originalNode.val)就算是deep copy了吧?
回复

使用道具 举报

🔗
idatascience 2018-4-22 07:48:33 | 只看该作者
全局:
第二题就是DP的做法~摸摸头~
回复

使用道具 举报

🔗
idatascience 2018-4-22 07:53:33 | 只看该作者
全局:
# Definition for a binary tree node.
class LinkedNode(object):
    def __init__(self, x):
        self.val = x
        self.next = None



class Solution:
    """
    @param root: a TreeNode, the root of the binary tree
    @return: nothing
    """

    def deepcopyLinked(self, root):
        head = LinkedNode(0)
        
        while root:
            head.next = LinkedNode(root.val)
            root = root.next
        
        return head.next
回复

使用道具 举报

🔗
idatascience 2018-4-22 08:26:18 | 只看该作者
全局:
bambloo 发表于 2018-4-22 07:46
第二题大概思路应该是dfs+memo数组吧,感觉是minimax问题,对方拿的少,自己才能拿的多

不用memo就是DP
回复

使用道具 举报

🔗
Ramily 2018-4-22 09:14:25 | 只看该作者
全局:
第二题类似莉蔻斯巴溜吧
回复

使用道具 举报

🔗
dearya99 2018-4-22 09:26:08 | 只看该作者
全局:
好像是四八六
回复

使用道具 举报

🔗
alanlxl 2018-4-22 09:42:25 | 只看该作者
全局:
  1. class Solution {
  2. public:
  3.     map<pair<int,int>, pair<int,int> > cache;
  4.     bool PredictTheWinner(vector<int>& nums) {
  5.         pair<int,int> res = helper(nums, 0, nums.size()-1);
  6.         return res.first >= res.second; // 这里改成return res.first即为第一个人能拿到的最大钱数

  7.     }
  8.     pair<int,int> helper(vector<int> & nums, int l, int r){
  9.         pair<int,int> cur(l,r);
  10.         if(cache.count(cur)) return cache[cur];
  11.         int x = (nums.size() - (r-l))%2 , y = (x+1)%2;
  12.         if(l==r){
  13.             cache[cur] = pair<int,int>(nums[l]*x, nums[l]*y);
  14.             return cache[cur];
  15.         }
  16.         if(x){ // A pick
  17.             pair<int,int> res1 = helper(nums, l+1, r);
  18.             res1.first += nums[l];
  19.             pair<int,int> res2 = helper(nums, l, r-1);
  20.             res2.first += nums[r];
  21.             cache[cur] = res1.first>res2.first ? res1 : res2;
  22.         }
  23.         else{
  24.             pair<int,int> res1 = helper(nums, l+1, r);
  25.             res1.second += nums[l];
  26.             pair<int,int> res2 = helper(nums, l, r-1);
  27.             res2.second += nums[r];
  28.             cache[cur] = res1.second>res2.second ? res1 : res2;
  29.         }
  30.         return cache[cur];
  31.     };
  32. };
复制代码


LC思霸留,只是return的内容不一样,原题是判断A是否能赢,DP + cache解法

评分

参与人数 1大米 +3 收起 理由
emmaff + 3

查看全部评分

回复

使用道具 举报

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

本版积分规则

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