1. 程式人生 > 其它 >演算法題 貪心-區間覆蓋(Python)

演算法題 貪心-區間覆蓋(Python)

技術標籤:演算法題Pythonpython演算法leetcode貪心演算法

題目

給定N個閉區間[ai,bi]以及一個線段區間[s,t],請你選擇儘量少的區間,將指定線段區間完全覆蓋。

輸出最少區間數,如果無法完全覆蓋則輸出-1。

輸入格式

第一行包含兩個整數s和t,表示給定線段區間的兩個端點。

第二行包含整數N,表示給定區間數。

接下來N行,每行包含兩個整數ai,biai,bi,表示一個區間的兩個端點。

輸出格式

輸出一個整數,表示所需最少區間數。

如果無解,則輸出-1。

資料範圍

1≤N≤10^5
−10^9≤ai≤bi≤10^9
−10^9≤s≤t≤10^9

輸入樣例:

1 5
3
-1 3
2 4
3 5

輸出樣例:

2

程式碼

tl, tr = map(int, input().split())
n = int(input())

segs = []
for _  in range(n):
    segs.append(list(map(int, input().split())))
segs.sort()

i = 0
res = 0
while i < n:
    max_r = -float('inf')
    while i < n and segs[i][0] <= tl:
        max_r = max(max_r, segs[i][1])
        i += 1
    if max_r < tl:
        res = -1
        break
    res += 1
    tl = max_r
    if tl >= tr: break

if tl >= tr: print(res)
else: print(-1)