問題 M 数の中央値は次のように定義されます 1) M を順番に並べ替えた後の真ん中の数字が奇数の場合 2) M が真ん中の 2 つの数字の平均数である場合 (再び並べ替え後) 最初は空の数字リストがあります. 次に、リストに番号を追加または削除できます。追加または削除操作ごとに、リスト内の数値の中央値を出力します。
例 : m = 5 個の数値のセット { 9, 2, 8, 4, 1 } の場合、中央値は並べ替えられたセット { 1, 2, 4, 8, 9 } の 3 番目の数値である 4 です。 m = 4, { 5, 2, 10, 4 }、中央値は、並べ替えられたセット { 2, 4, 5, 10 } の 2 番目と 3 番目の要素の平均であり、(4+5)/2 = 4.5 です。
私のアプローチ は、この方法で問題を解決できると思います.アイデアは、追加または削除操作ごとに再計算するのではなく、以前の中央値とポインターを使用して新しい中央値を見つけることです。
1) 常に要素を順番に保持し、重複を許可するマルチセットを使用します。言い換えれば、ソートされたリストを何らかの形で維持します。
2) 操作が add の場合
2.1) Insert this element into set and then calculate the median
2.2) if the size of set is 1 then first element will be the median
2.3) if the size of set is even, then
if new element is larger then prev median, new median will be avg of prev median
and the next element in set.
else new median will be avg of prev median and previous of prev element in the set.
2.4) if the size is odd, then
if new element is larger then prev median
if also less then 2nd element of prev median ( 2nd element used to calculate avg
of prev median) then this new element to be added will be new median
else median will be 2nd element use to calculate the avg during last iteration prev
median.
else
new median will be previous of prev median element in the set
3) 操作が remove の場合
3.1) First calculate the new median
3.2) If the size of set is 0 can't remove
3.3) If the size is 1 if the first element is the element to be removed, remove it else can't remove.
3.4) If the size of set is even, then
if the element to be deleted is greater than or equal to 2nd element of prev median, then
1st element of prev median will be new median
else 2nd element of prev median will be the new median
3.5) If the size of set is odd, then
if the element to be deleted is the prev median then find the avg of its prev and next element.
else if the element to be deleted is greater then prev median, new median will be avg of prev median and previous to prev median
else median will be avg of prev median and next element to prev median.
3.6) Remove the element.
これが作業コードです... http://justprogrammng.blogspot.com/2012/06/interviewstreet-median-challenge.html . このアプローチについてどう思いますか?