编程之美区间重合判断

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编程之美区间重合判断相关的知识,希望对你有一定的参考价值。

  给定一个源区间[x,y](y>=x)和N个无序的目标区间[x1,y1] [x2,y2] [x3,y3] [xn,yn],判断源区间[x,y]是不是在目标区间内?

  例如:给定源区间[1,6]和一组无序的目标区间[2,3] [1,2] [3,9],即可认为区间[1,6]在区间[2,3] [1,2] [3,9]内(因为目标区间实际上是[1,9])。

分析与解法

方法一:直接法

  一个比较直接的思路即将源区间和目标区间逐个投影到坐标轴上,只考察源区间未被覆盖的部分。如果所有的区间全部投影完毕,仍然有源区间没有被覆盖,那么源区间就不在目标区间内。

  时间复杂度为O(N2)。

方法二:排序合并目标区间

  将目标区间合并成几个有序的区间,这样就可以进行区间的比较。

  合并前先将区间按x坐标排序,然后合并成互不相交的区间。

  合并之后,可以遍历合并后的区间,判断源区间是否在合并后的区间内,也可以采用二分查找的方法来判定。

  时间复杂度为O(NlogN)。

扩展问题

  如何处理二维空间的覆盖问题?例如在Windows桌面上有若干窗口,如何判断某一窗口是否完全被其他窗口覆盖?

以上是关于编程之美区间重合判断的主要内容,如果未能解决你的问题,请参考以下文章

编程之美----字符串移位包含的问题

编程之美数组分割

编程之美快速寻找满足条件的两个数

编程之美子数组的最大乘积

编程之美寻找数组中的最大值和最小值

编程之美求数组的子数组之和的最大值