注: 题目本身来自新浪微博陈利人, 后续的内容也包含一些网友的评论. 在此做个整理和记录个人想法.
一. 题目背景
但是其实更关心这个的背景,我想了一下,给这个赋了两个情景:1.日程安排(突然有一个客户预约,问你某天有没有空,查询了一下日程,告诉对方有安排了,这时候在下一个有空闲的日期插入这个预约)2.购物(用户买了某个系列的产品(可能是基于关联规则之类产生的),向其推荐下一个未推荐过的产品
二. 解法
1. 比较容易想到的是, 用一个bitmap数组来存储, 这样查找和赋值都是在O(1)的时间内完成, 而且可以省去合并集合的操作, 但需要看离散很大的话, 空间浪费明显
2. 用链表. 存储结构为 (0) - (4) -(9)
| | |
(1) (5,6,7) (10,11)
然后采用折半查找, 如果x在结构中,在x最后一个不存在的数复制后,需要检查链表是否需要合并
3. B+树(区间树?)
4. 并查集