给定一个源区间[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桌面上有若干窗口,如何判断某一窗口是否完全被其他窗口覆盖?
时间: 2024-10-20 18:48:11