Problem Der Median von M Ziffern als 1) definiert ist, wenn M in sie nach dem Sortieren, um 2) ungeradee mittlere Zahl ist, wenn M auch die durchschnittliche Anzahl der Mitte 2 Zahlen ist (wieder nach dem Sortieren) Sie haben zunächst eine leere Nummernliste. Dann können Sie eine Nummer aus der Liste hinzufügen oder entfernen. Geben Sie für jeden Vorgang zum Hinzufügen oder Entfernen den Median der Zahlen in der Liste aus.interviewstreet medianen Herausforderung
Beispiel: Für eine Menge von m = 5 Zahlen {9, 2, 8, 4, 1} ist der Median die dritte Zahl in der sortierten Menge {1, 2, 4, 8, 9}, also 4. Ähnlich für den Satz von m = 4, {5, 2, 10, 4}, ist der Median der Durchschnitt des zweiten und des dritten Elements in der sortierten Menge {2, 4, 5, 10}, was (4 + 5)/2 = 4,5
Mein Ansatz ich denke, das Problem auf diese Weise gelöst werden kann .. Idee ist vorherigen Medianwert und Zeiger zu finden neuen Medianwert statt neu zu berechnen bei jedem hinzufügen oder entfernen von Betrieb zu verwenden.
1) Verwenden Sie Multi-Sets, die immer Elemente in Reihenfolge halten und Duplikate zulassen. Mit anderen Worten, sortierte Liste irgendwie beibehalten.
2) Wenn die Operation
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) ist hinzuzufügen, wenn der Betrieb
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.
Hier entfernen, ist der Arbeits Code ... http://justprogrammng.blogspot.com/2012/06/interviewstreet-median-challenge.html. Was halten Sie von diesem Ansatz?
Ihr Code tut seltsame Dinge zu verwenden, wenn ich den Median, zum Beispiel zu entfernen: „4 a 1 a 1 a 1 r 1 " – ffao
danke ffao..das war kleiner Fehler, jetzt korrigiert. Aber immer noch gibt es ein Problem, das ich nicht lokalisieren kann ... – sachin
% g verhält sich nicht richtig versuchen Sie es mit größeren Werten von Median und x wird es in wissenschaftlicher Notation drucken – amitkarmakar