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

Snapchat 9/27 Onsite

全局:

2016(7-9月) 码农类General 硕士 全职@snapchat - 内推 - Onsite  | | Pass | 应届毕业生

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

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

x
总共面了4轮.

第一轮是国人大哥, 以前没出现过的题. 是什么把两个数运到对面, 一个再跑回来...描述起来很复杂...这个国人大哥说话挺快的 感觉是个技术宅 交流的不是很好 但我能感觉出来他还是很有善意的.

第二轮也是国人大哥. 是关于6度人脉理论的. 地理貌似有. 大哥人很好 交流起来很开心.

第三轮是个美国大叔. 第一
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies

每次带回来的数不一定是这一趟带过去的两个数中的一个,可以从已经运过去的数中任意选一个

补充内容 (2016-10-9 14:08):
第一题 我花了点时间弄清楚了面试官的意思 最后只写了最基本的dfs 0.0

上一篇:10/5 亚麻 oa2 目前还没消息
下一篇:BloomBerg 10/06 电面
推荐
keytion 2016-10-9 09:11:40 | 只看该作者
全局:
比如之前的例子 {2,3, 5, 8};Optimal solution 是
{2,3}->    3
<-{2}         2
{5,8}->      8
<-{3}         3
{2,3}->      3
total cost 19;

Comparing with the naive greedy
{2,8}->    8
<-{2}         2
{2,5}->      5
<-{2}         2
{2,3}->      3

total cost 20;
  1. #include <vector>
  2. #include <unordered_map>
  3. #include <unordered_set>
  4. #include <map>
  5. #include <set>
  6. #include <queue>
  7. #include <cmath>
  8. #include <array>
  9. #include <algorithm>
  10. #include <numeric>
  11. #include <string>
  12. #include <list>
  13. #include <iostream>

  14. using namespace std;

  15. class Solution
  16. {
  17.   private:
  18.     vector<int> nums;

  19.     unordered_map<string, int> dp1go;
  20.     unordered_map<string, int> dp1back;

  21.   public:
  22.     Solution(vector<int> &_nums) : nums(_nums)
  23.     {
  24.         sort(nums.begin(), nums.end());
  25.     };

  26.     int solve1()
  27.     {
  28.         // brute force
  29.         int n = nums.size();
  30.         string s(n, '0');
  31.         for (int i = 0; i < n; i++)
  32.         {
  33.             s[i] = '1';
  34.             dp1go[s] = nums[i];
  35.             s[i] = '0';
  36.         }
  37.         for (int i = 0; i < n; i++)
  38.         {
  39.             for (int j = i + 1; j < n; j++)
  40.             {
  41.                 s[i] = '1';
  42.                 s[j] = '1';
  43.                 dp1go[s] = nums[j];
  44.                 s[i] = '0';
  45.                 s[j] = '0';
  46.             }
  47.         }
  48.         string tmp(n, '1');
  49.         return solve1go(tmp);
  50.     }

  51.     int solve1go(string &s)
  52.     {
  53.         // brute force
  54.         auto it = dp1go.find(s);
  55.         if (it != dp1go.end())
  56.             return it->second;

  57.         int n = s.size();
  58.         int ret = INT_MAX;
  59.         for (int i = 0; i < n; i++)
  60.         {
  61.             for (int j = i + 1; j < n; j++)
  62.             {
  63.                 if (s[i] == '1' && s[j] == '1')
  64.                 {
  65.                     s[i] = '0';
  66.                     s[j] = '0';
  67.                     ret = min(ret, nums[j] + solve1back(s));
  68.                     s[i] = '1';
  69.                     s[j] = '1';
  70.                 }
  71.             }
  72.         }
  73.         dp1go[s] = ret;
  74.         return ret;
  75.     }

  76.     int solve1back(string &s)
  77.     {
  78.         auto it = dp1back.find(s);
  79.         if (it != dp1back.end())
  80.             return it->second;

  81.         int n = s.size();
  82.         int ret = INT_MAX;
  83.         for (int i = 0; i < n; i++)
  84.         {
  85.             if (s[i] == '0')
  86.             {
  87.                 s[i] = '1';
  88.                 ret = min(ret, nums[i] + solve1go(s));
  89.                 s[i] = '0';
  90.             }
  91.         }
  92.         dp1back[s] = ret;
  93.         return ret;
  94.     }
  95. };

  96. int main()
  97. {
  98.     vector<int> tmp{2, 3, 5, 8, 10, 110, 100};
  99.     Solution sl(tmp);
  100.     cout << sl.solve1() << endl;
  101. }
复制代码
回复

使用道具 举报

推荐
keytion 2016-10-10 05:23:51 | 只看该作者
全局:
abcd1992719g 发表于 2016-10-10 04:19
11楼不是给了具体的例子么

用最小的两个数貌似是对的:见
http://blog.sina.com.cn/s/blog_b9bce1550101i9bp.html
不过好像也没有证明。

基本也是贪心,只不过要考虑两种情况,一种是大带小,小回;一种是两小过,小回,两大过,小回。
以4个单位为基础进行贪心。
回复

使用道具 举报

推荐
 楼主| abcd1992719g 2016-10-9 07:03:00 | 只看该作者
全局:
linweihua0 发表于 2016-10-9 06:59
所以第一题是不是greedy。每次用最小的那个数字带其他数字过河,然后最小的那个回来。
这样[2,3,5,8]岂不 ...

比如2,3过去, 2回来.   5,8过去,可以带3回来。 这样5这个item就不会在cost里了
回复

使用道具 举报

🔗
神罗天征 2016-10-8 08:27:23 | 只看该作者
全局:
请问第一题啥意思啊
回复

使用道具 举报

🔗
哈哈贼 2016-10-9 00:35:14 | 只看该作者
全局:
楼主有这么多offer 想好去哪家了吗
回复

使用道具 举报

🔗
linweihua0 2016-10-9 06:10:41 | 只看该作者
全局:
大神可以把题目描述一下嘛谢谢啦!
回复

使用道具 举报

🔗
linweihua0 2016-10-9 06:59:30 | 只看该作者
全局:
所以第一题是不是greedy。每次用最小的那个数字带其他数字过河,然后最小的那个回来。
这样[2,3,5,8]岂不是2*3 + 3 + 5 + 8是最优解了
回复

使用道具 举报

🔗
 楼主| abcd1992719g 2016-10-9 07:01:58 | 只看该作者
全局:
linweihua0 发表于 2016-10-9 06:59
所以第一题是不是greedy。每次用最小的那个数字带其他数字过河,然后最小的那个回来。
这样[2,3,5,8]岂不 ...

不是greedy
回复

使用道具 举报

🔗
warmland 2016-10-9 08:02:30 | 只看该作者
全局:
请问面的是什么组呀?
回复

使用道具 举报

🔗
keytion 2016-10-9 09:04:36 | 只看该作者
全局:
第一题目前只会DFS+DP,不知有更好的solution吗?
回复

使用道具 举报

🔗
keytion 2016-10-9 09:08:25 | 只看该作者
全局:
  1. <blockquote>#include <vector>
复制代码
回复

使用道具 举报

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

本版积分规则

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