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

Google面经

🔗
 楼主| adamru 2015-9-1 10:10:27 | 只看该作者
全局:
say543 发表于 2015-8-30 09:07
请问LZ onsite 第三题怎么解? 没想到好的方法...

见最新补充,希望有所帮助
回复

使用道具 举报

🔗
 楼主| adamru 2015-9-1 10:19:02 | 只看该作者
全局:
吞字。。。不明觉厉。。。hold[ i ] = max(hold[i-1], unhold[i-2] - price[ i ]) 和 unhold[ i ] = max(uphold[i-1], hold[i-1] + price[ i ])
回复

使用道具 举报

🔗
hbsophia 2015-9-3 13:19:27 | 只看该作者
全局:
adamru 发表于 2015-8-26 02:45
我是这么做的:
(1)直接存下输入二维数组就行 set就是O(1), query O(N)
(2)二维数组S存的是(0, 0 ...

lz 啊, 请教下,答案可以实现都是O(logN).

哪里有这个答案呢? 多谢lz,祝lz好运
回复

使用道具 举报

🔗
say543 2015-9-5 03:26:06 | 只看该作者
全局:
adamru 发表于 2015-9-1 10:19
吞字。。。不明觉厉。。。hold[ i ] = max(hold, unhold - price[ i ]) 和 unhold[ i ] = max(uphold, hold ...

感谢LZ 好牛 完全懂了~~
回复

使用道具 举报

全局:
alucardzhou 发表于 2015-8-26 03:14
请问楼主能贴出网上那个答案的链接么?十分感谢

你可以搜一下树状数组,这题就是用树状数组可以达到,更新和取和都是log(n)的复杂度
回复

使用道具 举报

🔗
douya 2015-9-20 02:24:39 | 只看该作者
全局:
楼主,电面第三问, set query 都很多,你是怎么答的? 数状数组根本答不上啊。
回复

使用道具 举报

🔗
hulahu 2015-9-20 06:00:08 | 只看该作者
全局:
股票没看懂, 楼主能不能发个代码啊。
回复

使用道具 举报

🔗
pyemma 2015-9-20 06:06:54 | 只看该作者
全局:
hj867955629 发表于 2015-8-25 10:45
也可以这么想,每个字母可能被缩写了,也可能没被缩写,所以最后是2^n个。

那不就转换成求subset了
回复

使用道具 举报

🔗
kelvinzhong 2015-9-20 07:22:41 | 只看该作者
全局:
写了个第四题 word abbrivation 的代码
  1. void abbrivationsHelper(string &s, int pos, vector<string> &ret, string tmp) {
  2.         // base case
  3.         if (pos >= s.length()) {
  4.                 ret.push_back(tmp);
  5.         }

  6.         string tmp2;
  7.         for (int i = pos; i < s.size(); i ++) {
  8.                 if (i == pos) {
  9.                         tmp2 = tmp;
  10.                         tmp2 += s[i];
  11.                         abbrivationsHelper(s, i + 1, ret, tmp2);
  12.                 }
  13.                 tmp2 = tmp;
  14.                 tmp2 += to_string(i - pos + 1);
  15.                 abbrivationsHelper(s, i + 1, ret, tmp2);
  16.         }
  17. }

  18. vector<string> abbrivations(string &s) {
  19.         vector<string> ret;
  20.         abbrivationsHelper(s, 0, ret, "");
  21.         return ret;
  22. }

  23. void printStrings(vector<string> ret) {
  24.         for (int i = 0; i < ret.size(); i ++) {
  25.                 cout << ret[i] << endl;
  26.         }
  27. }

  28. void test() {
  29.         vector<string> ret;
  30.         string s = "abc";
  31.         ret = abbrivations(s);
  32.         printStrings(ret);
  33.         s = "abbcc";
  34.         ret = abbrivations(s);
  35.         printStrings(ret);
  36. }
复制代码

评分

参与人数 1大米 +3 收起 理由
hulahu + 3 回答的很好!

查看全部评分

回复

使用道具 举报

🔗
kelvinzhong 2015-9-20 09:04:59 | 只看该作者
全局:
买股票的那题的代码
  1. //卖完后间隔一天才能买
  2. int stockDP(vector<int> prices) {
  3.         if (prices.size() < 0) {
  4.                 return 0;
  5.         }

  6.         vector<int> t(2, 0); // 0 means hold, 1 means unhold
  7.         vector<vector<int>> dp(prices.size(), t);

  8.         // dp[i][0] = max(dp[i-1][0], dp[i-2][1] - prices[i])
  9.         // dp[i][1] = max(dp[i-1][1], dp[i-1][0] + prices[i])
  10.         dp[0][0] = -prices[0];
  11.         dp[0][1] = 0;
  12.         for (int i = 1; i < prices.size(); i ++) {
  13.                 // Case 1: hold
  14.                 if (i == 1) {
  15.                         dp[i][0] = max(dp[i-1][0], -prices[i]);
  16.                 } else {
  17.                         dp[i][0] = max(dp[i-1][0], dp[i-2][1] - prices[i]);
  18.                 }
  19.                 // Case 2: unhold
  20.                 dp[i][1] = max(dp[i-1][1], dp[i-1][0] + prices[i]);
  21.         }
  22.         return dp[prices.size()-1][1];
  23. }

  24. void test() {
  25.         vector<int> prices;
  26.         prices.push_back(1);
  27.         prices.push_back(2);
  28.         cout << stockDP(prices) << endl; // 1
  29.         prices.push_back(3);
  30.         prices.push_back(4);
  31.         cout << stockDP(prices) << endl; // 3

  32.         vector<int> prices2;
  33.         prices2.push_back(1);
  34.         prices2.push_back(3);
  35.         prices2.push_back(1);
  36.         prices2.push_back(4);
  37.         cout << stockDP(prices2) << endl; // 3

  38.         vector<int> prices3;
  39.         prices3.push_back(4);
  40.         prices3.push_back(3);
  41.         prices3.push_back(2);
  42.         prices3.push_back(1);
  43.         cout << stockDP(prices3) << endl; // 0
  44. }
复制代码

评分

参与人数 1大米 +3 收起 理由
hulahu + 3 回答的很好!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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