一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 1415|回复: 24
收起左侧

snapchat 挂经

[复制链接] |试试Instant~ |关注本帖
panlong222 发表于 2016-2-19 07:18:08 | 显示全部楼层 |阅读模式

2016(1-3月) 码农类 硕士 全职@Snapchat - 内推 - 技术电面 |Failfresh grad应届毕业生

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

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
昨天刚面的,是第二次电面。过程如下:准点点开视频链接,等了10分钟不见动静,这时收到一个邮件是recruiter说面试官已经等我10分钟了,不见我踪影。。。
看完立刻关闭浏览器重新点击那个视频链接,就连上了,那头的面试官还在面带微笑。。。刚解释了几句,又发现我的麦有问题,对方听不见。。。折腾半天才,重启电脑才解决。
再次连上时,离规定面试起始时间已经过了20分钟了。我那时候的心情就用四个字概括: 心急如焚。

给面试官道歉,解释了几句,然后双方自我介绍,问了下为什么要选择snapchat(感觉snapchat特别喜欢问这个问题,楼主第一轮电面的时候被问到直接说我一点都不了解snapchat。。。),接下来就是coding环节。. From 1point 3acres bbs

题目大意如下:
给定一个全是正整数的array, 和一个targe值。
你可以取任意数目的elements from the array,允许有重复,然后使得这些elements的和等于target
问一共多少种solutions?  需要注意的是:只要排列不一样就视为不同的solution, 如 {1,2} 和 {2,1}算两个solutions,而不是一个。

example:.1point3acres缃
array = {1,2,3}, target = 4
solutions:
1. {1,1,1,1}
2. {1,1,2}
3. {1,2,1}
4. {2,1,1}
5. {1,3}
6. {3,1}
7. {2,2}. 1point 3acres 璁哄潧
Therefore, return 7.
. from: 1point3acres.com/bbs
. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
最开始并没有说这个array全是正数,需要你提问,并且去确认。这个时候面试官会问你如果包含非正数,
有没有algorithm能解决这个问题。这些楼主都没有问题。

很明显要用Dynamic Programming去解。楼主一看时间不多了,来不及多想,凭直觉就上了,写了个看似正确其实是错误的解法。
用了2D array。
因为楼主把红色那句给忽视掉了,楼主的解法是针对solutions里不包含duplicate的解法,这样一来其实题目变得更难。。。面试结束之
后才发现解法本身就大错特错了,而面试的时候面试官
也没发现楼主的解法本质上就不对,只是说“看起来没问题,应该是初始的值不对”。有可能是他觉得没时间了,
没有让我去debug我自己的代码。然后他就给我大致说了他自己的解法,用1D array。然后让我把他的解法code出来,楼主很快搞定,
基本一遍就bugfree了。接着问了下他的方法的时间复杂度,和我的方法的时间复杂度。然后就是我提问的环节。随便聊了几句就结束了。
完了那个黑人小哥面试官还来了句 Hope to see you soon! 哎,今天就收到拒信了,老外也爱说官话吗?

总体来说我对自己也很不满意,由于最开始耽误了20分钟,我整个过程都火急火燎的,也没太注重交流,担心写代码时间都不够了,题目也没有好好去审,
其实最后小哥还是多给了20分钟,等于依然是1个小时的面试。细细想来,20分钟的突发状况其实是压倒楼主的最后一根稻草,这道题如果经验丰富点其实可以在很短时间内做出来的。另外感觉snapchat很注重attitude,楼主事先对这个公司做的工作少之又少。

没能拿到snapchat的onsite还是很难过,伤心了一天,求安慰!
















补充内容 (2016-3-2 06:56):

好吧,经地里小伙伴们提醒,这题就是个走楼梯的题。大家可以无视我这么多的分析了- -菜是原罪啊

评分

2

查看全部评分

phantom 发表于 2016-2-19 12:03:48 | 显示全部楼层
gengenhappy 发表于 2016-2-19 11:51
“你可以取任意数目的elements from the array,允许有重复” 这句话有歧义吧。
(1)是允许每个元素取的 ...

这题意思就和走楼梯一样的。。只是一般走楼梯要么走一步要么走两步。。他这相当于规定你可以走{1,2,3,4}步都可以。。

评分

1

查看全部评分

回复 支持 2 反对 0

使用道具 举报

haoxuango 发表于 2016-2-19 09:11:46 | 显示全部楼层
这道题是不是backtracking就好了呢?

没有面挂过的程序员不是好工程师!
回复 支持 反对

使用道具 举报

 楼主| panlong222 发表于 2016-2-19 09:47:42 | 显示全部楼层
haoxuango 发表于 2016-2-19 09:11
这道题是不是backtracking就好了呢?

没有面挂过的程序员不是好工程师!
.1point3acres缃
想了下,确实可以!~哎,自己就想不出来。。。
回复 支持 反对

使用道具 举报

 楼主| panlong222 发表于 2016-2-19 11:24:12 | 显示全部楼层
haoxuango 发表于 2016-2-19 09:11. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
这道题是不是backtracking就好了呢?

没有面挂过的程序员不是好工程师!

又仔细想了下 backtracking的复杂度是 O(length的target次方). 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
DP的复杂度是O(length * target)
差的有点多。
回复 支持 反对

使用道具 举报

gengenhappy 发表于 2016-2-19 11:31:42 | 显示全部楼层
不太理解为什么1d array 可以求解。请lz赐教!
能想出来的也就是dfs先求得unique解,再对每个解做permutation。
回复 支持 反对

使用道具 举报

 楼主| panlong222 发表于 2016-2-19 11:43:25 | 显示全部楼层
gengenhappy 发表于 2016-2-19 11:31. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
不太理解为什么1d array 可以求解。请lz赐教!
能想出来的也就是dfs先求得unique解,再对每个解做permutat ...

你这个属于brute force了。。。
首先,其实用dfs也可以做到直接把所有的解枚举出来的。这个并不难想。
然后,说说用1array的DP解法:
    int state[] = new int[target + 1]; // state 表示 target为i的时候,有多少种解法。
     state = sum (state[i - array[k]])  (for k = 0,1,...n-1, i - array[k] >= 0)


补充内容 (2016-2-19 11:44):
state = sum (state[i - array[k]])  (for k = 0,1,...n-1, i - array[k] >= 0)

补充内容 (2016-2-19 11:45):
斜体字格式有问题。请无视。。
state【i】 = sum (state[i - array[k]])  (for k = 0,1,...n-1, i - array[k] >= 0)
回复 支持 反对

使用道具 举报

gengenhappy 发表于 2016-2-19 11:51:52 | 显示全部楼层
panlong222 发表于 2016-2-19 11:43
你这个属于brute force了。。。
首先,其实用dfs也可以做到直接把所有的解枚举出来的。这个并不难想。. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
...

“你可以取任意数目的elements from the array,允许有重复” 这句话有歧义吧。
(1)是允许每个元素取的数目重复
(2)数组中存在重复元素但每个元素只能取一次
如果是第一种情况的话,dp得解。
如果是第二种情况的话,以上dp应该并不能吧
LZ应该说的是第一种吧
回复 支持 反对

使用道具 举报

 楼主| panlong222 发表于 2016-2-19 12:03:06 | 显示全部楼层
gengenhappy 发表于 2016-2-19 11:51.1point3acres缃
“你可以取任意数目的elements from the array,允许有重复” 这句话有歧义吧。
(1)是允许每个元素取的 ...
. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
嗯 第一种。example里可以看出来的哈。
回复 支持 反对

使用道具 举报

 楼主| panlong222 发表于 2016-2-19 12:05:41 | 显示全部楼层
phantom 发表于 2016-2-19 12:03. more info on 1point3acres.com
这题意思就和走楼梯一样的。。只是一般走楼梯要么走一步要么走两步。。他这相当于规定你可以走{1,2,3,4} ...

正解。                        
回复 支持 反对

使用道具 举报

gengenhappy 发表于 2016-2-19 12:08:57 | 显示全部楼层
phantom 发表于 2016-2-19 12:03 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
这题意思就和走楼梯一样的。。只是一般走楼梯要么走一步要么走两步。。他这相当于规定你可以走{1,2,3,4} ...

赞!!!
凑字,凑字
回复 支持 反对

使用道具 举报

true_pyemma 发表于 2016-2-19 12:15:00 | 显示全部楼层
可以用完全背包的解法来做吗?
回复 支持 反对

使用道具 举报

haoxuango 发表于 2016-2-19 14:35:23 | 显示全部楼层
panlong222 发表于 2016-2-19 11:43
你这个属于brute force了。。。
首先,其实用dfs也可以做到直接把所有的解枚举出来的。这个并不难想。. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
...

这样感觉就好简单啊 。。。
回复 支持 反对

使用道具 举报

bentison90 发表于 2016-2-24 08:23:29 | 显示全部楼层
应该是走楼梯吧:
. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
        int findComb(vector<int>& candidates, int n) {
                std::sort(candidates.begin(), candidates.end());. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
                vector<int> dp(n + 1, 0);
                dp[0] = 1;
                for (int i = 1; i < n + 1; i++) {
                        for (int j = 0; j < candidates.size(); j++) {
                                if (i <= candidates[j])
                                        dp[i] += dp[i - candidates[j]];
                                else
                                        break;
                        } 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
                }
                return dp[n];
        }
回复 支持 反对

使用道具 举报

 楼主| panlong222 发表于 2016-2-24 10:42:49 | 显示全部楼层
bentison90 发表于 2016-2-24 08:23. Waral 鍗氬鏈夋洿澶氭枃绔,
应该是走楼梯吧:. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴

        int findComb(vector& candidates, int n) {

能想到走楼梯 这题就迎刃而解了~
回复 支持 反对

使用道具 举报

 楼主| panlong222 发表于 2016-3-2 06:55:38 | 显示全部楼层
好吧,经地里小伙伴们提醒,这题就是个走楼梯的题。大家可以无视我这么多的分析了- -菜是原罪啊
回复 支持 反对

使用道具 举报

nothingtrouble 发表于 2016-3-4 12:25:18 | 显示全部楼层
panlong222 发表于 2016-3-2 06:55. from: 1point3acres.com/bbs
好吧,经地里小伙伴们提醒,这题就是个走楼梯的题。大家可以无视我这么多的分析了- -菜是原罪啊

应该是想太复杂了,其实加上红字更加简单。就是一维dp, 没有红字就是lz说的二维dp了。
回复 支持 反对

使用道具 举报

 楼主| panlong222 发表于 2016-3-4 22:21:55 | 显示全部楼层
nothingtrouble 发表于 2016-3-4 12:25
应该是想太复杂了,其实加上红字更加简单。就是一维dp, 没有红字就是lz说的二维dp了。
-google 1point3acres
你这话楼主爱听~
回复 支持 反对

使用道具 举报

william_gong 发表于 2016-3-4 23:04:23 | 显示全部楼层
请问这题有负输入怎么处理?
回复 支持 反对

使用道具 举报

nothingtrouble 发表于 2016-3-4 23:49:30 | 显示全部楼层
william_gong 发表于 2016-3-4 23:04.鏈枃鍘熷垱鑷1point3acres璁哄潧
请问这题有负输入怎么处理?
. From 1point 3acres bbs
应该不会有负数的,不然[-1,1],target=1 可以有无穷种方法
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-5 23:59

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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