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

[动态规划] 求讨论,Google OA题 奇偶跳 该怎么做?

全局:

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

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

x

题目如图。
我目前的想法(不一定对):两个dp数组,存储从当前位置分别奇偶跳能否到达最后的位置。然后从后往前遍历数组,同时维护一个递增的list,每次用binary在递增数组里找比当前数字大/小的数。
请问是否正确?是否有更好的方法?

评分

参与人数 2大米 +7 收起 理由
潇毛砣 + 2 谢谢发起讨论!
14417335 + 5 高频题

查看全部评分


上一篇:如何提高做OA的阅读能力
下一篇:刷题太累了,牢骚一下继续刷
全局:
挺好的题。有一个小细节:Leetcode上的那道975题和楼上的有小区别,楼主的是等于大于;Leetcode是大于

我好像必须用了两个map来分别query奇数跳和偶数跳
    map<int, int> ascend;
    map<int, int, greater<int>> descend;


回复

使用道具 举报

🔗
bodeplot 2018-12-30 07:51:40 | 只看该作者
全局:
我觉得你的解法是可行的。

但是想问你"从后往前遍历数组,维护一个递增的list"是怎么维护呢?如果是从位置i走到位置(i - 1)的时候,把A[i]插入到这个递增的list的相应位置(就像insertion sort那样),那么不管这个递增的list是ArrayList还是LinkedList,总的复杂度都是O(n^2)。因为ArrayList在插入的时候需要挪动O(n)个元素,LinkedList需要O(n)来找到插入的位置。

为了达到O(n logn)的时间复杂度,最好维护一个balanced binary tree而不是一个list。这样无论是query还是insert都是O(log n), 总的复杂度就是O(n log n)了。写C++的话可以用<map>的数据结构,Java里应该也有类似的吧。

补充内容 (2018-12-30 07:52):
这样的话这个解法就是O(n log n)的时间复杂度,O(n)的空间复杂度。暂时还不确定是不是有更好的。

补充内容 (2018-12-30 07:54):
格式有问题。"把A插入到这个递增的list"应该是"把A(i)插入到这个递增的list"。之前用的方括号,被论坛解读成斜体了,汗。

评分

参与人数 1大米 +3 收起 理由
东尼老师 + 3 给你点个赞!

查看全部评分

回复

使用道具 举报

全局:
可以用dynamic programming。
从后往前,对于每个数记录两个boolean变量,分别是从这个数开始奇数跳和开始偶数跳能否到达最后一个数。假设当前的数是a,若是从a奇数跳到的是b,则从a开始奇数跳和从b开始偶数跳的boolean的值应该是一致的。最后算有多少数的奇数跳的boolean的值是true就行了。
求加米
回复

使用道具 举报

🔗
杨超越 2018-12-31 02:37:16 | 只看该作者
全局:
我个人的想法:用DP, 从后往前扫描,因为前一次是奇数跳,那么下一次就是从新的位置进行偶数跳,这样就可以用之前的结果(分别是奇数次跳从这个位置开始,和偶数次这个位置开始起跳)(因为我们是从后往前扫描)。用一个map(红黑树)/treemap去储存后面扫描过的数字,每次去找到第一个大于当前位置的数字或者小于当前位置的数字(没有找到就是false)。这样dp就连接起来了。 时间复杂度应该是O(nlogn) 空间复杂度应该是O(n)。如果要用binary search的话你还是每次都需要sort一下已经扫描过的数字,因为原来的序列是无序的,用pq也没办法高效的insert或者访问节点。所以我感觉是用map来做比较合理。
希望大家一起讨论指正

评分

参与人数 1大米 +3 收起 理由
东尼老师 + 3 给你点个赞!

查看全部评分

回复

使用道具 举报

全局:
会不会有重复的数字呢?
回复

使用道具 举报

🔗
杨超越 2019-1-13 12:08:25 | 只看该作者
全局:
leetcode今天竞赛已经有这个题了~975 Odd Even Jump
回复

使用道具 举报

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

本版积分规则

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