1 クラスソリューション: 2 DEF removeCoveredIntervals(自己、間隔:' リスト[リストの[int] ') - > INT : 3 #intervals = ソート(間隔) 4 N = LEN(間隔) 5 DP = [ 0 ] * N 6 以下のために私が中範囲(N): 7 場合 DP [I] == 1 : 8 続ける 9 他: 10の ための J における範囲(I + 1 、N): 11 場合 DP [J] == 1 : 12が 続行 13 他の: 14 であれば区間[i]が[ 0 ] <=間隔[j] [ 0 ]との間隔[I] [ 1 ]> =間隔[J] [ 1 ]: 15 DP [J] = 1 16 のelif間隔[I] [ 0 ]> =間隔[J] [ 0 ]との間隔[I] [ 1 ] <=間隔[J] [ 1 ]: 17 DP [I] = 1 18 数= 0 19 のためにI における範囲(N): 20 もし DP [I] == 0 : 21 カウント+ = 1 22 戻りカウント
1288削除対象区間
考え互いに素なセットは、マージされます(小規模)セクションフラグが、最後のフラグは必要な数ではありません。
思考の別の行、最初の並べ替えを比較し、より効率的な:
1 クラスソリューション: 2 DEF removeCoveredIntervals(自己、間隔:リスト[リスト[ INT ]]) - > INT : 3 カウント= lenは(間隔) 4 intervals.sort() 5 MAX =間隔[ 0 ] [ 1 ] 6 ための I 、(S、E)に列挙(区間[ 1 :]): 7 もし E> MAX: 8 MAX = E 9 他: 10 カウント- = 1 11 リターン回数