📣 独立日限时特惠: VIP通行证立减$68
楼主: strisunshine
跳转到指定楼层
上一主题 下一主题
收起左侧

问一个脸熟电面题

🔗
GardenAAA 2017-9-26 03:05:39 | 只看该作者
全局:
chris612ku 发表于 2017-9-21 14:54
不能重复
先从左到右做个dp存以这个idx为最后的max sliding window值
举个例子[2,3,2,2,6,1,6], size = ...

能解释一下这一步吗,最后从中间重新sliding window traverse 配合那两个dp array取max sum就好,谢谢大神
回复

使用道具 举报

🔗
chris612ku 2017-9-26 06:05:50 | 只看该作者
全局:
GardenAAA 发表于 2017-9-26 03:05
能解释一下这一步吗,最后从中间重新sliding window traverse 配合那两个dp array取max sum就好,谢谢大 ...

这个意思是指,
1. 一开始你有一个从左边扫好的left_dp array,这个array再每一个的节点的意思是说,在这个节点以左的最大sliding window值,
2. 同样做法做一次从右边扫right_dp,意思一样是在这个节点以右的最大sliding window max值
3. 最后你只要从offset k ~ len - k - 1去找所有valid 的middle part sliding window,每找到一个sliding window,left_dp[cur-k] + cur_val + right_dp[cur+1] 就是你这个sliding window所能组成的最大3 sliding window max值,按照这个思路做下去就好了

评分

参与人数 1大米 +10 收起 理由
GardenAAA + 10 回答的很好!

查看全部评分

回复

使用道具 举报

🔗
 楼主| strisunshine 2017-9-27 07:21:36 | 只看该作者
全局:
tekkaman 发表于 2017-9-26 02:26
一直听说fb有这道题,但是不知道具体要求是什么。我说一个刚刚想出的思路(按照lz的题目要求):选最大的连 ...

我也用的同样的想法, 然后觉得移除简单点, 结果发现不行, 移除的话会把原来不相连的连一起, 标记应该是可以的, 看题目要求
回复

使用道具 举报

🔗
 楼主| strisunshine 2017-9-27 07:25:57 | 只看该作者
全局:
chris612ku 发表于 2017-9-26 06:05
这个意思是指,
1. 一开始你有一个从左边扫好的left_dp array,这个array再每一个的节点的意思是说,在 ...

还是有个疑问想请教一下
以下这个例子应该返回什么呢?
7 8 8 6 6 5 5  size 2

面试中我也是没有搞清楚这一点, 是应该只考虑全局最优吗, 就是个3个Sum之和最大最行, 不管单独的, 像以下:
(7 8) (8 6) (6 5) 5

还是每找一个Sum 都应该是当前最优的, 像以下:
7 (8 8) (6 6) (5 5)  

我一开始理解的是后一种, 感觉按DP返回的是前一种
回复

使用道具 举报

🔗
chris612ku 2017-9-27 07:39:23 | 只看该作者
全局:
strisunshine 发表于 2017-9-27 07:25
还是有个疑问想请教一下
以下这个例子应该返回什么呢?
7 8 8 6 6 5 5  size 2

个人觉得是整体的最大,应该不需要去考虑单独的问题,
这样才比较像个面试题。。。
感觉如果还要管单独的。。。这不是到太好写。。。

但这纯属个人意见啦。。。不代表真的,自己没碰过这道题
回复

使用道具 举报

🔗
 楼主| strisunshine 2017-9-27 09:48:06 | 只看该作者
全局:
tekkaman 发表于 2017-9-27 09:37
连在一起也没有关系啊,比如第一次选出的index是2,3,4,而第二次是1,5,6,那么其实这两个窗口就是1, ...

请见楼上的讨论, 这个是基于哪种要求的呀, 是全局最优就可以了, 还是每次都要局部最优呢 ?
回复

使用道具 举报

🔗
onein 2017-9-28 09:57:39 | 只看该作者
全局:
chris612ku 发表于 2017-9-26 06:05
这个意思是指,
1. 一开始你有一个从左边扫好的left_dp array,这个array再每一个的节点的意思是说,在 ...

没怎么看懂,能具体举例子说明一下吗?
回复

使用道具 举报

🔗
chris612ku 2017-9-29 07:24:28 | 只看该作者
全局:
onein 发表于 2017-9-28 09:57
没怎么看懂,能具体举例子说明一下吗?

先从左到右做个dp存以这个idx为最后的max sliding window值
举个例子[2,3,2,2,6,1,6], size = 2
存法是[x,5,5,5,8,8,8], x代表那个数不管,不在sliding window内
以此类推从右往左就变成[8,8,8,8,7,7,x]
最后从中间重新sliding window traverse 配合那两个dp array取max sum就好
这个例子的话就是5 + 8 + 7 = 20
回复

使用道具 举报

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

本版积分规则

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