你能否找到两个时间间隔数组是否重叠,以一种优化的方式?假设输入数组A包含10个元素,每个元素都有一个开始日期和结束日期,类似地,输入数组B包含4个元素,每个元素都有一个开始数据和结束数据。现在找出A和B是否重叠?
示例1:
输入:
A={[1,5],[7,10],[11,15]}; //Array A contains 3elements, and each element have start and end time.
B={[6,10],[1,5]};//Array B contains 2elements, and each element have start and end time.输出:是//为什么因为A和B在6,10 \x,1,5处重叠
示例2:
Input
A={[1,5],[8,10],[11,15]}; //Array A contains 3elements, and each element have start and end time.
B={[5,8],[15,16]};//Array B contains 2elements, and each element have start and end time.输出: No //为什么因为A和B不重叠,在5,8,x,15,16处重叠
我知道我们可以用蛮力来解决这个问题,通过迭代B中的每个元素,并与A中的每个元素进行比较,来检查是否重叠(Ai.start<=Bj.start和Ai.end>Bj.start),其中N是数组A的长度,M是B的长度,则需要O(N*M)。
你能优化一下解决方案吗。
发布于 2017-08-22 10:31:25
您可以根据开始时间对数组进行排序。然后,通过同时迭代两个数组(使用两个指针),可以检查元素的结束时间是否大于下一个元素的开始时间。如果是这样的话,那么您已经发现了一个重叠。
发布于 2017-08-22 06:33:35
这里是你能做的
总复杂度O(nlogn)
https://stackoverflow.com/questions/45810033
复制相似问题