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

求问一道google面试题,设计数据结构存储range

全局:

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

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

x
请教一下大家,如何设计一个数据结构,存储一些range,然后要实现两个功能,find(int n) 以及insert(range)
比如:
现在有range (1,5)(8,10)(12,20)
find(3) return true;
find(11) return false;
inserrt((3,9))之后,变为(1,10)(12,20)
我感觉用线段树来做,可是线段树该怎么实现呢,是不是所有的数字都要存着?因为有可能一个数字就是一个range,感觉很难实现

上一篇:请教下关于round robin 和 SJF的问题
下一篇:一道面试题
🔗
zkh1991 2016-1-7 13:10:13 | 只看该作者
全局:
本帖最后由 zkh1991 于 2016-1-7 13:20 编辑

BST?
每个node存有两个value,规定node.val2>=node.val1,node.left.val2<node.val1,node.right.val1>node.val2
       (8, 10)
      /         \    a
(1, 5)         (12, 20)

insert(3, 9) : (8, 10) --> (3, 10) 然后发现node的left child违反了规定因为5>3,node.left.right就可以砍掉,merge node & node.left , (3, 10) --> (1, 10), node.left = node.left.left, 然后继续往下看有没有violation没有就可以停
回复

使用道具 举报

🔗
elvisxyu 2016-1-22 13:17:52 | 只看该作者
全局:
不用啥特别数据结构吧,ArrayList<ArrayList<Integer>就行, insert就是LC Insert Interval上,find就用二分找pair的min进行比较。
转换成树进行insert后还要调整,反而麻烦。
回复

使用道具 举报

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

本版积分规则

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