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