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

Google on campus

全局:

2014(10-12月) 码农类General 硕士 全职@google - 内推 - 校园招聘会  | | Other |

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

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

x
两轮连续45分钟。

第一轮:
1. 一串数,例如 10, 20,30,40,20,50,25. 两个玩家,只能选最左或最右,轮流选,怎样max你的和。举出贪心反例。用max-m
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies


补充内容 (2014-11-1 03:02):
第一题DP解法:

评分

参与人数 4大米 +103 收起 理由
北美农民 + 60
Arthur2012 + 3 感谢分享!
jby1797 + 10
爱丽丝和鲍勃 + 30

查看全部评分


上一篇:新人请教,Epic OA到onsite要等多久
下一篇:Amazon OA面经
全局:
第一题比较容易:
  1. public class MaxGame {
  2.         public static int maxGame(int[] arr) {
  3.                 if(arr == null || arr.length == 0)        return 0;
  4.                 int len = arr.length;
  5.                
  6.                 //calculate the sum from index i to index j
  7.                 //dynamic programming method
  8.                 int[][] segSum = new int[len][len];
  9.                 for(int i = 0; i < len; ++i)        segSum[i][i] = arr[i];
  10.                 for(int i = 0; i < len; ++i) {                       
  11.                         for(int j = i + 1; j < len; ++j) {                               
  12.                                 segSum[i][j] = (segSum[i][j - 1] + arr[j]);
  13.                         }
  14.                 }
  15.                
  16.                 //dynamic programming method to find the max picks
  17.                 int[][] maxPick = new int[len][len];
  18.                 for(int i = 0; i < len; ++i)                maxPick[i][i] = arr[i];
  19.                 for(int i = len - 2; i >= 0; --i) {
  20.                         for(int j = i + 1; j < len; ++j) {
  21.                                 maxPick[i][j] = Math.max(arr[i] + segSum[i + 1][j] - maxPick[i + 1][j],
  22.                                                                              arr[j] + segSum[i][j - 1] - maxPick[i][j - 1]);
  23.                         }
  24.                 }               
  25.                 return maxPick[0][len - 1];
  26.         }
  27.        
  28.         public static void main(String[] args) {
  29.                 int[] arr = new int[] {1, 2, 2, 3, 2,1};
  30.                 System.out.println(maxGame(arr));
  31.         }
  32. }
复制代码
回复

使用道具 举报

推荐
王可雪 2014-11-4 15:04:19 | 只看该作者
全局:
王可雪 发表于 2014-11-4 14:47
没考虑太多cases,不一定对。不过倒是提醒我了,对付游戏minimax是比较常用的思路。为了感谢lz分享面经, ...

上面的代码有点错误。
  1. #include <iostream>
  2. #include <assert.h>
  3. #include <algorithm>
  4. using namespace std;

  5. int coinGame(int array[], int n) {
  6.         assert(n > 0);
  7.         if (n == 1)
  8.                 return array[0];
  9.         int start = 0;
  10.         int end = n - 1;
  11.         int sum = 0;
  12.         for (; start < end;) {
  13.                 if (end - start == 1) {
  14.                         sum += max(array[start], array[end]);
  15.                         break;
  16.                 }
  17.                 else if (end - start == 2) {
  18.                         sum += max(array[start], array[end]) + array[start+1];
  19.                         break;
  20.                 }
  21.                 else {
  22.                         //cout << array[end] - array[end-1] << endl;
  23.                         sum += (min(array[start] - array[start+1], array[start]-array[end]) >
  24.                                 min(array[end] - array[end-1], array[end]-array[start]))
  25.                                 ? array[start++] : array[end--];
  26.                         //cout << end << endl;
  27.                         min(array[start] - array[start+1], array[start]-array[end]) >
  28.                         min(array[end] - array[end-1], array[end]-array[start]) ? start++ : end--;
  29.                         //cout << end << endl;               
  30.                 }
  31.         }
  32.         return sum;
  33. }

  34. int main() {
  35.         int test1[] = {50, 100, 1000, 49};
  36.         int test2[] = {50, 100, 1, 49};
  37.         cout << coinGame(test1, 4) << endl;
  38.         cout << coinGame(test2, 4) << endl;

  39. }
复制代码
回复

使用道具 举报

推荐
王可雪 2014-11-4 14:47:28 | 只看该作者
全局:
22691482 发表于 2014-11-4 11:20
思路是这样。。问题是怎么写出可以跑的代码。。

没考虑太多cases,不一定对。不过倒是提醒我了,对付游戏minimax是比较常用的思路。为了感谢lz分享面经,我贴一下我的代码,要是有没考虑到的,欢迎大家指正。
  1. #include <iostream>
  2. #include <assert.h>
  3. #include <algorithm>
  4. using namespace std;

  5. int coinGame(int array[], int n) {
  6.         assert(n > 0);
  7.         if (n == 1)
  8.                 return array[0];
  9.         int start = 0;
  10.         int end = n - 1;
  11.         int sum = 0;
  12.         for (; start < end; start++, end--) {
  13.                 if (end - start == 1)
  14.                         sum += max(array[start], array[end]);
  15.                 else if (end - start == 2) {
  16.                         sum += max(array[start], array[end]) + array[start+1];
  17.                         break;
  18.                 }
  19.                 else {
  20.                         sum += (min(array[start] - array[start+1], array[start]-array[end]),
  21.                                 min(array[end] - array[end-1], array[end]-array[start]))
  22.                                 ? array[start] : array[end];
  23.                 }
  24.         }
  25.         return sum;
  26. }

  27. int main() {
  28.         int test1[] = {50, 100, 1, 49};
  29.         cout << coinGame(test1, 4) << endl;
  30. }
复制代码

补充内容 (2014-11-4 14:48):
我这里assume的永远玩家先手
回复

使用道具 举报

🔗
pf22099 2014-10-31 02:43:50 | 只看该作者
全局:
reverse linked list里的一次 K 个是啥意思?
回复

使用道具 举报

🔗
 楼主| 22691482 2014-10-31 03:04:20 | 只看该作者
全局:
pf22099 发表于 2014-10-31 02:43
reverse linked list里的一次 K 个是啥意思?

Leetcode那个。。
回复

使用道具 举报

🔗
pf22099 2014-10-31 03:05:01 | 只看该作者
全局:

噢···了然了然,多谢!
回复

使用道具 举报

🔗
 楼主| 22691482 2014-10-31 04:05:28 | 只看该作者
全局:
pf22099 发表于 2014-10-31 03:05
噢···了然了然,多谢!

校友你好 !! 哈哈
回复

使用道具 举报

🔗
pf22099 2014-10-31 04:27:32 | 只看该作者
全局:
22691482 发表于 2014-10-30 12:05
校友你好 !! 哈哈

哈哈,Trojans遍天下啊
回复

使用道具 举报

🔗
忽而今夏 2014-10-31 12:25:07 | 只看该作者
全局:
请问楼主能否说一下randomNumber那个题的做法?
回复

使用道具 举报

🔗
 楼主| 22691482 2014-10-31 12:37:27 | 只看该作者
全局:
忽而今夏 发表于 2014-10-31 12:25
请问楼主能否说一下randomNumber那个题的做法?

说来话长啊。。。主要是跟面试官聊,一步步的改进时间和空间。。更注重过程吧。
回复

使用道具 举报

🔗
 楼主| 22691482 2014-11-4 03:20:17 | 只看该作者
全局:

你好,,请问代码里面的segsum是干嘛的?
回复

使用道具 举报

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

本版积分规则

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