选择不相交区间-java实现

本文介绍了一种解决数轴上选择不相交区间的算法,通过将区间按照y值排序,讨论了如何在x值不相交或相交时选择最优区间,以确保最多数量的区间互不相交。最终给出了示例输入和输出。
摘要由CSDN通过智能技术生成

题目:数轴上有n个开区间(ai,bi),选择尽量多个区间,使得这些区间两两没有公共点。

所以我们可以先对齐排序,因为输入是随机的。假设每个区间表示为(x,y)我们可以选择按照x排序所有区间,也可以选择按照y来排序所有区间。而不管选择哪一个来排序,其原理和本质都一样,都是为了方便操作,将其有序化。

我们这里选择按照y来排序,排序完后有y1 <= y2 <= y3.......

现在我们讨论x1 x2 ....

当x1 > x2时,区间被x2这个区间包含,所以选择x1这个区间更为划算。

而当x1 < x2时,当x2 > y1时,区间互不相交,先选x1区间,接着选x2区间

当x1 < x2 && x2 <=y1 时,两个区间相交,这时,如果选择了x2区间,就不能选择x1区间,反之亦然。

但要选择哪一个呢?我们知道如果不选x2也就是选x1,则我们此时把x1分成两半部分,一部分在x2内,如果选择了x2,x2区间不仅包含了x1的,还可能包含x3区间的,因为x2的长度肯定大于或等于x1区间的长度,也就是说从概率上讲,选x2肯定不如选x1划算。

综上所述:这个问题第一次一定要选择x1,接着就是把相交部分去掉,循环选不想交的。

package chp8.tanxin;

import java.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值