📣 4th of July限时特惠: VIP通行证立减$68
回复: 75
跳转到指定楼层
上一主题 下一主题
收起左侧

Google on-site最后一面非常难的一道题目

全局:

2014(1-3月) 码农类General 硕士 全职@google - 内推 - Onsite  | | Other |

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

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

x
写一个shuffle数组的算法
给一个数组A[],里面的数是无序的,比如 A[]={1,2,3,7,3,2,5}
shuff
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
strong>
改正 :比如一种可能的结果是 A[]={1,7,3,5,2,3,2}

评分

参与人数 6大米 +49 收起 理由
wcongying + 3 :)
BreakingDown-_- + 3 感谢分享!
charlesfs + 3 感谢分享!
爱丽丝和鲍勃 + 10
kang1415926 + 10 I'll be interviewed by G tomorrow. Bles.

查看全部评分


上一篇:Epic 面经(2014.3)
下一篇:春假扭腰Bloomberg一游

本帖被以下淘专辑推荐:

推荐
ototsuyume 2014-3-14 13:34:49 | 只看该作者
全局:
google电面的时候被问了这道题,这题也就看上去吼人而已,nlogn的算法是一下子能想出来的,线性的算法仔细想一下也能想到
nlogn是排序后在偶数位填上后一半的数,然后在奇数位填上前一半的数
线性算法是当奇数位判断是否比前一个数小,不符合就交换,偶数位判断时候比前一个数大,不符合就交换
证明用反证法
回复

使用道具 举报

推荐
wyh11 2014-3-14 12:53:10 | 只看该作者
全局:
北美农民 发表于 2014-3-14 12:42
第一感觉没觉得Make sense,懒得细想了, 解释下?

好像说错了。 =。=
我想想。
回复

使用道具 举报

全局:
本帖最后由 北美农民 于 2014-3-13 22:45 编辑

我感觉可以用调整算法.

从第一个数开始往右扫描, 我们要做的是当扫描到第i个数的时候, 前i个数必须满足 a[0] <=a[1] >= a[2] .... a, 当i为n就结束了

当i为0, 2, 4...,前i - 1个元素已经满足了。 如果a[ i ] > a[i + 1] 交换a[ i ] 和 a[i + 1], 这样使得前i个都满足, 因为a[i + 1] 必然小于a[ i - 1]。
当i为1,3,5... 同理, 如果a[ i ] < a[i + 1], 交换使得前i个满足, 因为a[i + 1] 必然大于a[i - 1]。
其余的情况不用理会

我们每一步都能保证当前和之前的元素都满足这个规律, 所以必然有解。

评分

参与人数 3大米 +16 收起 理由
baobozo + 3 6666666666
wcongying + 3 很有用的信息!
kang1415926 + 10 It works!

查看全部评分

回复

使用道具 举报

🔗
wyh11 2014-3-14 11:43:53 | 只看该作者
全局:
先把数组由小到大排序
然后从中间分成两个数组,
把第二部分reverse。
再把两个数组合并。

评分

参与人数 1大米 +3 收起 理由
ohmystill + 3 觉得这个方法简单粗暴啊

查看全部评分

回复

使用道具 举报

🔗
 楼主| Linzertorte 2014-3-14 11:48:35 | 只看该作者
全局:
北美农民 发表于 2014-3-14 11:44
我感觉可以用调整算法.

从第一个数开始往右扫描, 我们要做的是当扫描到第i个数的时候, 前i个数必须满足 ...

请写code

点评

那你用沙发的方法吧, 可以work.  发表于 2014-3-14 11:52
回复

使用道具 举报

🔗
 楼主| Linzertorte 2014-3-14 11:51:11 | 只看该作者
全局:
wyh11 发表于 2014-3-14 11:43
先把数组由小到大排序
然后从中间分成两个数组,
把第二部分reverse。

你这个是nlogN的算法。题目只要求一个偏序关系。有没有更快的?
回复

使用道具 举报

🔗
北美农民 2014-3-14 11:51:55 | 只看该作者
全局:
wyh11 发表于 2014-3-13 22:43
先把数组由小到大排序
然后从中间分成两个数组,
把第二部分reverse。

其实不用排序, partition直到中间点为pivot就行
回复

使用道具 举报

🔗
JOJULUBBI 2014-3-14 11:55:37 | 只看该作者
全局:
wyh11 发表于 2014-3-14 11:43
先把数组由小到大排序
然后从中间分成两个数组,
把第二部分reverse。

+1,偶数个数跟奇数个数要分开讨论?
回复

使用道具 举报

🔗
wyh11 2014-3-14 12:01:25 | 只看该作者
全局:
北美农民 发表于 2014-3-14 11:51
其实不用排序, partition直到中间点为pivot就行

partitin有点难描述,连续两次partition的pivot在中点不同侧就可以。不一定要中点为pivot
回复

使用道具 举报

🔗
 楼主| Linzertorte 2014-3-14 12:08:55 | 只看该作者
全局:
wyh11 发表于 2014-3-14 12:01
partitin有点难描述,连续两次partition的pivot在中点不同侧就可以。不一定要中点为pivot

写代码是不是不太好写啊?这个题当时只剩下10分钟了。做完还要向面试官提问的环节。
回复

使用道具 举报

🔗
wyh11 2014-3-14 12:13:52 | 只看该作者
全局:
Linzertorte 发表于 2014-3-14 12:08
写代码是不是不太好写啊?这个题当时只剩下10分钟了。做完还要向面试官提问的环节。

嗯,不过google面试我感觉代码完成度不是特别重要。比较看重沟通的过程吧。
bless楼主
回复

使用道具 举报

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

本版积分规则

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