线段数据互相覆盖问题-算法题
"""
线段数组覆盖的问题
a-[[1,3] [2,6]]
b-[[1,4],[4,5]]
a数组中,可以得到[1,6]区间,可以覆盖b数组中所有线段
a-[[1,2],[4,7]]
b-[[2,5],[6,7]]
a数组就不能覆盖b数组中的[2,5]
#############
对a b分别进行线段合并
如上例中 a-合并得到[[1,6]]可以覆盖b-[[1,5]]
a-[[1,2],[4,7]] b-[2,7]不能覆盖
合并a,b之后,顺序按照单位的去比较
"""
def merge(a):
"""
建一个足够大的数组,线段区间在内就为1
"""
start,end = 1e9,-1e9
for x in a:
if x[0]0]
if x[1]>end:
end = x[1]
leng = end - start+1
array = [0 for i in range(leng)]
for y in a:
for x in range(y[0],y[1]+1):
array[x-start]=1
return array, start, end
def solution(a, b):
a_array, a_start, a_end = merge(a)
b_array, b_start, b_end = merge(b)
print(a,a_array)
print(b,b_array)
if b_startor b_end>a_end: return False
for i in range(b_start, b_end+1):
if b_array[i-b_start]==1:
if a_array[i-a_start]==0: return False
return True
def main():
a = [[1,3],[2,6]]
b = [[1,4],[4,5]]
print(solution(a,b))
a = [[1,2],[4,7]]
b = [[2,5],[6,7]]
print(solution(a,b))
main()
"""
[[1, 3], [2, 6]] [1, 1, 1, 1, 1, 1]
[[1, 4], [4, 5]] [1, 1, 1, 1, 1]
True
[[1, 2], [4, 7]] [1, 1, 0, 1, 1, 1, 1]
[[2, 5], [6, 7]] [1, 1, 1, 1, 1, 1]
False
"""