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

Google 电面(准备二面求人品)

全局:
不是太懂诶, 楼主能给个例子或简单Po一下代码么?
感觉这意思好像是直接一个N次的循环就能找到了。。。
回复

使用道具 举报

🔗
saberkun 2015-10-6 09:48:52 | 只看该作者
全局:
williamwjs 发表于 2015-10-6 07:11
同祝你好运!!!

先求cycle 吗?但可能有多个cycle,对每个a_init 都求?
回复

使用道具 举报

全局:
又见紫风铃 发表于 2015-10-6 09:25
不是太懂诶, 楼主能给个例子或简单Po一下代码么?
感觉这意思好像是直接一个N次的循环就能找到了。。。

如果N很大很大,那么时间要求非常高,有环的话,最多k次就能找到了。
回复

使用道具 举报

🔗
say543 2015-10-6 11:32:28 | 只看该作者
全局:
题看不太懂 能说说吗?
回复

使用道具 举报

全局:
saberkun 发表于 2015-10-6 09:48
先求cycle 吗?但可能有多个cycle,对每个a_init 都求?

好像意思是a_init是input,对这个求就行了
回复

使用道具 举报

全局:
nothingtrouble 发表于 2015-10-6 11:16
如果N很大很大,那么时间要求非常高,有环的话,最多k次就能找到了。

哦哦,所以建个hashset保存每次遇到的值,出现相同的时候就说明有环了,然后set有x个元素,只用找N % x次就行了?

补充内容 (2015-10-6 20:47):
不对,这样只能记录从头开始的cycle,还是得用hashtable记下重复开始的位置
回复

使用道具 举报

🔗
uuuouou 2015-10-6 20:25:23 | 只看该作者
全局:
lz的免题和我的一样啊http://www.1point3acres.com/bbs/thread-142154-1-1.html,我当时表现不好就一轮游了,lz加油哈,祝好运~
回复

使用道具 举报

全局:
感觉是这个意思,大概写了下
  1. class Solution:
  2.     def bruteForce(self, nums, N, a_init):
  3.         # O(N)
  4.         if not nums: return None
  5.         A = a_init
  6.         for i in range(N):
  7.             A = nums[A]

  8.         return A

  9.     def countinuousFinding(self, nums, N, a_init):
  10.         # O(k)
  11.         if not nums: return None
  12.         occuredIndex = {}
  13.         A = a_init
  14.         occuredIndex[A] = 1

  15.         cycleStart = None
  16.         for i in range(1, N+1):
  17.             A = nums[A]
  18.             if A in occuredIndex:
  19.                 cycleStart = occuredIndex[A]
  20.                 break
  21.             else:
  22.                 occuredIndex[A] = i + 1

  23.         if not cycleStart:
  24.             return A
  25.         else:
  26.             N = (N - cycleStart + 1) % (len(occuredIndex) - cycleStart + 1)

  27.         A = a_init
  28.         for i in range(cycleStart - 1 + N):
  29.             A = nums[A]
  30.         return A
复制代码
回复

使用道具 举报

🔗
 楼主| williamwjs 2015-10-6 22:52:39 | 只看该作者
全局:
hulahu 发表于 2015-10-6 08:08
看是简单, 楼主举个例子吧。

arr = [1, 2, 3, 4, 5, 6…]
N = 3
例子大概是这样的:

a_init = 0

A_0 = 0                                   
A_1 = arr[A_0] = arr[0] = 1
A_2 = arr[A_1] = arr[1] = 2
A_3 = arr[A_2] = arr[2] = 3
return 3
回复

使用道具 举报

🔗
 楼主| williamwjs 2015-10-6 22:54:00 | 只看该作者
全局:
uuuouou 发表于 2015-10-6 20:25
lz的免题和我的一样啊http://www.1point3acres.com/bbs/thread-142154-1-1.html,我当时表现不好就一轮游了 ...

要是早点儿看见就好了
回复

使用道具 举报

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

本版积分规则

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