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

谷歌 Intern OA

🔗
 楼主| 980329498 2018-9-29 22:54:11 | 只看该作者
全局:
wofaint 发表于 2018-9-29 15:54
第一题比较好的解法应该是用一个 max heap 保留所有字数组的最后一个数字。刚开始 heap 里只有 nums[0],之 ...

抱歉我刚才想错了,第一次我用的是最小堆所以错了,最大堆应该没问题。你的方法确实应该是时间最好的解法,我那种是时间最坏,如果优化的话可以在arraylist中搜索时用二叉搜索把时间复杂度变成O(nlogn)
回复

使用道具 举报

🔗
Wuwei8372 2018-9-30 00:26:37 | 只看该作者
全局:
wofaint 发表于 2018-9-29 15:54
第一题比较好的解法应该是用一个 max heap 保留所有字数组的最后一个数字。刚开始 heap 里只有 nums[0],之 ...

这个test case貌似不能过啊:7,8,4,9,1,6,5,7
回复

使用道具 举报

🔗
Unous 2018-9-30 00:57:07 | 只看该作者
全局:
wofaint 发表于 2018-9-29 15:54
第一题比较好的解法应该是用一个 max heap 保留所有字数组的最后一个数字。刚开始 heap 里只有 nums[0],之 ...

7,9,6,5,1,8 这个也不行啊。 8进来的时候堆中仅有5和1 这样的话由于8>5需要新开
然而8可以跟在9后边
回复

使用道具 举报

🔗
wofaint 2018-9-30 15:46:40 | 只看该作者
全局:
Wuwei8372 发表于 2018-9-30 00:26
这个test case貌似不能过啊:7,8,4,9,1,6,5,7

大家说的对。我之前给的解法确实是错的。抱歉,没有仔细思考就发了出来。这题不能用 heap。正确的解法应该是这样:开一个 list,这个 list 还是保存每个子数组最后一个元素。然后保持这个 list 是强递增的。刚开始 list 只有 nums[0] 一个元素。然后来新值 nums[i] 时,先看它是不是>= list 中最后一个(即最大值),如果是,说明必须开一个新子数组,这样把它 append 到 list 上边;如果不是,那就二叉搜索 list 中最小的大于 nums[i] 的那个值,然后用 nums[i] 更新该值,也就是更新该子数组的队尾。最后返回值是 list 中元素个数。
这样做法时间复杂度还是 O(n logn),空间复杂度 O(n)。
回复

使用道具 举报

🔗
wofaint 2018-9-30 15:46:58 | 只看该作者
全局:
Unous 发表于 2018-9-30 00:57
7,9,6,5,1,8 这个也不行啊。 8进来的时候堆中仅有5和1 这样的话由于8>5需要新开
然而8可以跟在9后边

大家说的对。我之前给的解法确实是错的。抱歉,没有仔细思考就发了出来。这题不能用 heap。正确的解法应该是这样:开一个 list,这个 list 还是保存每个子数组最后一个元素。然后保持这个 list 是强递增的。刚开始 list 只有 nums[0] 一个元素。然后来新值 nums[i] 时,先看它是不是>= list 中最后一个(即最大值),如果是,说明必须开一个新子数组,这样把它 append 到 list 上边;如果不是,那就二叉搜索 list 中最小的大于 nums[i] 的那个值,然后用 nums[i] 更新该值,也就是更新该子数组的队尾。最后返回值是 list 中元素个数。
这样做法时间复杂度还是 O(n logn),空间复杂度 O(n)。
回复

使用道具 举报

🔗
wofaint 2018-9-30 15:47:13 | 只看该作者
全局:
980329498 发表于 2018-9-29 22:54
抱歉我刚才想错了,第一次我用的是最小堆所以错了,最大堆应该没问题。你的方法确实应该是时间最好的解法 ...

大家说的对。我之前给的解法确实是错的。抱歉,没有仔细思考就发了出来。这题不能用 heap。正确的解法应该是这样:开一个 list,这个 list 还是保存每个子数组最后一个元素。然后保持这个 list 是强递增的。刚开始 list 只有 nums[0] 一个元素。然后来新值 nums[i] 时,先看它是不是>= list 中最后一个(即最大值),如果是,说明必须开一个新子数组,这样把它 append 到 list 上边;如果不是,那就二叉搜索 list 中最小的大于 nums[i] 的那个值,然后用 nums[i] 更新该值,也就是更新该子数组的队尾。最后返回值是 list 中元素个数。
这样做法时间复杂度还是 O(n logn),空间复杂度 O(n)。
回复

使用道具 举报

🔗
仙道彰 2018-10-3 09:04:32 | 只看该作者
全局:
楼主能问下是要自己写test case吗还是会像leetcode一样给好test case?
回复

使用道具 举报

🔗
 楼主| 980329498 2018-10-3 11:37:59 | 只看该作者
全局:
gly612 发表于 2018-10-3 09:04
楼主能问下是要自己写test case吗还是会像leetcode一样给好test case?

点test按钮之后会先跑他给的三个test case,然后跑你自己给的例子,最多可以自己列十个。
回复

使用道具 举报

无效楼层,该帖已经被删除
🔗
QQDDQ 2018-10-4 16:20:42 | 只看该作者
全局:
题目说的是这个row里面没有比它高的就不需要create一个新的row 所以7,9,6,5,1,8只有两个row吧
回复

使用道具 举报

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

本版积分规则

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