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

Yammer面试

全局:

2016(10-12月) 码农类General 硕士 全职@microsoft - 内推 - 技术电面  | | Other | 在职跳槽

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

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

x
刚刚店面完yammer,之前发现地里几乎没有他家面筋,来发一个题大家一起讨论吧,但是估计挂了。
一个白人大叔,非常不耐烦(只有说bye的时候比较热情),第一句就是我没时间看你cv 给你道题先做吧。
题目:  
write a f
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
n be traversed to -2 or 4 since the value is 3.


楼主用了recursive,有人有啥好建议么。。。

评分

参与人数 2大米 +32 收起 理由
sam12321mas + 2 给你点个赞!
夏虫不知雪花 + 30

查看全部评分


上一篇:Pocket Gems HR Anna 发了一次oa,我还没来得及做就发电面!
下一篇:Bloomberg反悔撤回onsite?:)
🔗
rcholic 2016-12-6 07:22:14 | 只看该作者
全局:
能解释一下啥意思吗?用人话解释一下
回复

使用道具 举报

🔗
rcholic 2016-12-6 07:29:48 | 只看该作者
全局:
我写了下面这个,貌似是正确的:

  1. public static boolean canReachZero(int[] A, int index) {

  2.         if (index < 0 || index >= A.length) return false;
  3.         if (A[index] == 0) return true;
  4.         int num = A[index];

  5.         return canReachZero(A, index - num) || canReachZero(A, index + num);
  6.     }
复制代码

补充内容 (2016-12-6 07:30):
working example:

  1. int[] nums = {5,3,1,4,0,6};
  2.         int index = 1;

  3.         boolean res = canReachZero(nums, index);
复制代码
回复

使用道具 举报

🔗
 楼主| joannana 2016-12-6 07:42:17 | 只看该作者
全局:
就是给一个array和一初始index ,例如 nums=[2,4,5,0,5] index = 0
那么下一个可到的值是 0 - nums[0]= -2  or 0 + nums[0]=2 ; -2 out of boundry
然后 下一个值就是 nums[2]= 5 然后 2- 5; 2 +5; 问可不可以到达 ,值为 0 的 index 这里就是nums[3];

评分

参与人数 1大米 +2 收起 理由
sam12321mas + 2 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
rcholic 2016-12-6 07:46:31 | 只看该作者
全局:
joannana 发表于 2016-12-6 07:42
就是给一个array和一初始index ,例如 nums=[2,4,5,0,5] index = 0
那么下一个可到的值是 0 - nu ...

看我上面写的code,work的,也是recursion思路
回复

使用道具 举报

🔗
 楼主| joannana 2016-12-6 07:48:56 | 只看该作者
全局:
但是,如果第一次和第三次得到index相同,但是并没有 out of boundry,这就是一个死循环。
然后我加了个 global 的 hashset... 然后就被白人大叔说了...

评分

参与人数 1大米 +2 收起 理由
sam12321mas + 2 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
rcholic 2016-12-6 08:02:22 | 只看该作者
全局:
joannana 发表于 2016-12-6 07:48
但是,如果第一次和第三次得到index相同,但是并没有 out of boundry,这就是一个死循环。
然后我加了个 g ...

还真是,忘记死循环这个可能性了。但是加一个参数lastNum来记录上次访问的数,下面的code就work了吧:
  1. private static boolean canReachZero(int[] A, int index, int lastNum) {

  2.         if (index < 0 || index >= A.length) return false;
  3.         if (A[index] == 0) return true;
  4.         if (A[index] == lastNum) return false;

  5.         int num = A[index];
  6.         return canReachZero(A, index - num, A[index]) || canReachZero(A, index + num, A[index]);
  7.     }
复制代码

补充内容 (2016-12-6 08:07):
使用这个method,应该这样做:

  1. boolean result = canReachZero(A, index, A[index]-1);
复制代码
回复

使用道具 举报

🔗
 楼主| joannana 2016-12-6 08:08:30 | 只看该作者
全局:
要是我木有理解错的话, lastNum 只记录了上一个,要是第一次和第五次得到了相同的index,那还是死循环呀。。。

评分

参与人数 1大米 +2 收起 理由
sam12321mas + 2 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
rcholic 2016-12-6 08:16:20 | 只看该作者
全局:
最终代码:
  1. public static boolean canReachZero(int[] A, int index) {

  2.         return canReachZero(A, index, index); // NOTE: A[index]-1 is for avoiding the return false in line 24
  3.     }

  4.     private static boolean canReachZero(int[] A, int index, int lastIndex) {

  5.         if (index < 0 || index >= A.length) return false;
  6.         if (A[index] == 0) return true;

  7.         int num = A[index];
  8.         if (index - num == lastIndex || index + num == lastIndex) return false; // avoids dead loop here
  9.         return canReachZero(A, index - num, index) || canReachZero(A, index + num, index);
  10.     }
复制代码
回复

使用道具 举报

🔗
rcholic 2016-12-6 08:16:52 | 只看该作者
全局:
joannana 发表于 2016-12-6 08:08
要是我木有理解错的话, lastNum 只记录了上一个,要是第一次和第五次得到了相同的index,那还是死循环呀。 ...

给一个test case啊
回复

使用道具 举报

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

本版积分规则

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