演算法題 貪心-區間覆蓋(Python)
阿新 • • 發佈:2021-01-24
技術標籤:演算法題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)