LeetCode Find Right Interval(二分)

问题:

给定一组区间,对于每一个区间 i,检查是否存在一个区间 j,它的起始点大于或等于区间 i 的终点,这可以称为 j 在 i 的“右侧”。

对于任何区间,你需要存储的满足条件的区间 j 的最小索引,这意味着区间 j 有最小的起始点可以使其成为“右侧”区间。如果区间 j 不存在,则将区间 i 存储为 -1。最后,你需要输出一个值为存储的区间值的数组。

注意:

    你可以假设区间的终点总是大于它的起始点。
    你可以假定这些区间都不具有相同的起始点。

思路:

第一种方法暴力法,时间复杂度为O(n^2),空间复杂度为O(n)

第二种方法排序+扫描,首先基于左端点排序,然后再扫描确定。时间复杂度为O(n^2),空间复杂度为O(n)

第三种方法排序+二分法。时间复杂度为O(nlgn),空间复杂度为O(n)

第四种方法使用treemap,信赖于TreeMap.ceilingEntry方法,时间复杂度为O(nlgn),空间复杂度为O(n)

第五种方法使用两个数组,一个基于左端点排序,另外一个基于右端点排序。在对排序后的基于右端点排序后的数组遍历时,以另外一个数组中找到满足条件后,基于前一次的位置开始查找。时间复杂度为O(nlgn),空间复杂度为O(n)

具体代码参考:

https://github.com/wuli2496/OJ/tree/master/LeetCode/Find%20Right%20Interval

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kgduu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值