查看: 1630| 回复: 3
跳转到指定楼层
上一主题 下一主题
收起左侧

[二分/排序/搜索] 对时间复杂度要求很高的一道看似简单的题。。。

全局:

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

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

x

输入数据是List<Data>。List中有n个数据;Data的数据结构是class Data {String result; long time}。其中result只有两种,"Win"和"Lose"。要根据time找到最后一次数据result更替。result更替就是时间上相邻的两个数据result从Win到Lose或者从Lose到Win。


比如t1:Win, t2:Win, t3:Win, t4:Lose, t5:Lose, t6:Lose, 则结果为t4:Lose。
注意数据可能是乱序的,比如t5:Lose, t6:Lose, t4:Lose, t1:Win, t2:Win, t3:Win, 但是结果依然要是t4:Lose。
如果是t1:Win, t2:Lose; t3:Win, t4:Lose则结果是t4:Lose
如果是t4:Lose, t1:Win, t3:Lose, t2:Win则结果是t3:Lose //因为t3是最后一次result更替


time是unbounded,也就是任意时间。
t1, t2, t3代表时间排序后的顺序。但是实际数据中可以是任意顺序。


要求时间复杂度是O(n)!!也就是说排序基本被排除。time是unbounded所以桶排序也没戏了。。。


大神们有什么好想法吗?


上一篇:系统设计刷题
下一篇:刷题计划
推荐
minker 2024-4-27 07:43:17 | 只看该作者
全局:
过一遍,找到最晚出现的Win和Lose,这是O(N)。

假设Win和Lose都有,否则无解。

不妨假设最晚的Win比Lose早,则需求的点就是这个Win后面那个Lose,再过一遍找Win后面那个Lose就行了,还是O(N)。

评分

参与人数 2大米 +2 收起 理由
Vincentapple + 1 赞一个
chrisluo87 + 1 赞一个

查看全部评分

回复

使用道具 举报

全局:
过一遍找最晚时间点的结果,再过一遍找最晚时间点的相反结果
回复

使用道具 举报

推荐
CSDH 2024-4-27 03:04:52 来自APP | 只看该作者
全局:
类似128,用哈希模拟桶,每次新的记录进来就找t-1的记录以及t+1的记录是否在,如果在就判断是不是胜负转换,然后尝试刷新答案。然后把当前t的记录入桶
回复

使用道具 举报

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

本版积分规则

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