ウィンドウの中央値をスライディングleetcode480

1  「」」
2  メディアンリスト整数順序付きの中央値であり、リストのサイズが偶数の場合、中央値がないだから中央値は、2つの中央値の平均である。。。
 3つの 実施例:
 4  [2、 3,4]、中央値は3である
 5  [2,3]、中央値は(2 + 3)/ 2 = 2.5
 6  アレイNUMS与えられるが、非常にの左から移動してサイズkのスライディングウインドウがあります非常に右に配列。あなただけのウィンドウにk個の数字を見ることができます。たびに右のいずれかの位置によって、スライディングウィンドウを移動します。あなたの仕事は、出力に元の配列内の各ウィンドウの中央値の配列です。
 7  たとえば、
 8  所与NUMS = [1,3、-1、-3,5,3,6,7]、及びk = 3
 9 中央位置ウィンドウ
 10  --------------- -----
 。11  [-1。3. 1] -3-。5. 6. 7. 3. 1
 12である 。1 [3 -3 -1]。5. 6. 3 -1 7
 である13  。1. 3 [-1-35] -1 7. 6. 3
 14  。1. 3-1 [-353] 3。7 6。
 15  1. 3 -1 3 [536] 5。7。
 16  1. 3 - -3。5. 1 [3 6 7]は6
 。17  したがって、中央リターンスライディングウィンドウとして[1、-1、-1,3,5,6]。
 18は "" " 
19  " "" 
20は、 スライドのサイズkに使用します窓のメディアン演算各ウィンドウ
 21を ジエチルとが整然と維持するウィンドウでソート、用途が二分
 22をある 位置NUMSを見つけるために[IK]要素と特定慣行吐出さ
 23 インサートNUM秩序ウィンドウを確保するための正しい位置に[i]の要素、中央値計算
 24  " "" 
25  クラス解決法1を:
 26である     DEF medianSlidingWindow(セルフ、NUMS、K):
 27          インポート二分
 28          IF K == :0
 29              リターン[]
 30          勝利= (NUMS [:K])ソート
 31は          ANS = []
 32          のための I におけるレンジ(K、lenの(NUMS)+ 1 ):
 33は、              中央値=([// K 2]勝つ+([勝ちますK - 1)// 2])/ 2.0 #が勝つパリティ長平均普遍的な
34は             ans.append(中央値)
 35              IF== I LEN(NUMS):
 36                  BREAK 
37 [              [IK]およびその後NUMS insort次いで、それを削除NUMSのインデックスを取得[I] 
38は              、インデックス= bisect.bisect_left(NUMS [IKを獲得])
 39              勝利.pop(インデックス)
 40              bisect.insort_left(勝つ、NUMS [I])が
 41である             " "" 
42は             L = [1,3,4,6,8]
 43である             X = 3
 44である             x_insert_point bisect.bisect_left =(L、X) 。1
 45              L xの#ルックアップ、Xが存在する場合、xは不在復帰位置に挿入されるべきであるXの左の位置返し
 46              リスト3に存在する、左の位置に復帰する。1
 47              x_insert_point bisect.bisect_right =(L、 X)3
48              xは、xは不在復帰位置に挿入されるべきで存在する場合L xの#検索は、位置xの右を返す
 49              リストに3本、位置右3に戻ります
 50              x_insort_left bisect.insort_left =(L、Xを)[1、3、3、4、6、8]
 51              #xはXが存在しないX正しい位置に挿入されている左側に存在するリストLに挿入された
 52である             x_insort_rigth bisect.insort_right =(L、X) [1、3、3、3、4、6、8]
 53              #xはXが存在しないXが正しい位置に挿入されている右側に存在する場合、リストLに挿入された
 54である             " "" 
55          リターンANS
 56は 
57です " "" 
58  [1,3、-1、-3,5,3,6,7]
 59  。3
 60  の出力
 61である [1.00000、-1.00000、-1.00000,3.00000,5.00000]
 62である 期待
 63のIS [1.00000、-1.00000、-1.00000,3.00000,5.00000,6.00000]
 64  "" " 
65  " "" 
66  熟練文言パイソン
 67  "" " 
68  クラス対処方法2:
 69      DEF medianSlidingWindow(セルフ、NUMS、K):
 70          インポート二等分
 71は、          ウィンドウ= :ソート([K] NUMS)
 72の          中央値= []
 73である         ため、B  ZIP([K:】NUMS、NUMS + [0]): ない場合0、上述したように少なくとも1つの値に答え、図示し、タプル(a、b)は戻りファスナー
74              medians.append((ウィンドウ[K // 2] +ウィンドウ[(1-K)// 2])/ 2 。)
 75             window.remove()
 76              bisect.insort(ウィンドウ、B)
 77          リターンメジアン

 

おすすめ

転載: www.cnblogs.com/yawenw/p/12357902.html