線段陣列互相覆蓋問題 演算法題

2021-08-26 08:37:08 字數 1541 閱讀 7670

"""

線段陣列覆蓋的問題

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之後,順序按照單位的去比較

"""defmerge

(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

# 一次遍歷得到陣列中為1的為覆蓋情況

return array, start, end

defsolution

(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)

# 逐個單位進行比較,判斷a是否能覆蓋b

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

defmain

(): 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

"""

線段覆蓋問題

題目描述 n e最近在研究線段覆蓋問題。n e有n條線段和 個數軸,數軸 限長,每條線段在數軸上都有 個固定起點si和固定終點ei,其中si和ei都是整數。放在數軸上的線段不能重合,不能重合定義為 對於兩條不同線段 不妨設為第i條和第j條 定要滿 si ej或ei sj。現在n e將線段放在數軸上,...

線段覆蓋問題

在乙個數軸上有n條線段,現要選取其中k條線段使得這k條線段兩兩沒有重合部分,問最大的k為多少。最左邊的線段放什麼最好?顯然放右端點最靠左的線段最好,從左向右放,右端點越小妨礙越少 其他線段放置按右端點排序,貪心放置線段,即能放就放 洛谷p1803 凌亂的yyy 線段覆蓋 includeusing n...

線段數詳解(樹狀陣列運用範圍更廣)

為了能讓朋友們更好的理解演算法我分了倆塊 樹狀陣列 目錄 時間複雜度以及適用範圍 線段數其實就是個二叉樹。線段數的儲存 線段數的函式 建立線段數 求區間和 求區間最大值 修改區間中某個元素的值 舉個例子 線段數比樹狀陣列時間複雜度要大,但是應用更廣泛,一般用於複雜的區間求和和求最大值,比如求取最大值...