Skip to content

Commit 715cede

Browse files
authored
Merge pull request #1115 from agnihotriketan/patch-37
Create 295-Find-Median-from-Data-Stream.cs
2 parents 2b70f3b + 6abb501 commit 715cede

File tree

1 file changed

+84
-0
lines changed

1 file changed

+84
-0
lines changed
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
public class MedianFinder {
2+
3+
List<int> Nums;
4+
public MedianFinder() {
5+
6+
Nums = new List<int>();
7+
}
8+
9+
public void AddNum(int num) {
10+
int index = Nums.BinarySearch(num);
11+
if (index < 0)
12+
{
13+
index = ~index;
14+
}
15+
Nums.Insert(index, num);
16+
}
17+
18+
public double FindMedian() {
19+
int count = Nums.Count;
20+
return count % 2 == 0 ? (double)((Nums[count / 2 - 1] + Nums[count / 2]) * 0.5) : Nums[count / 2];
21+
}
22+
}
23+
24+
/**
25+
* Your MedianFinder object will be instantiated and called as such:
26+
* MedianFinder obj = new MedianFinder();
27+
* obj.AddNum(num);
28+
* double param_2 = obj.FindMedian();
29+
30+
// ***IMP : Not passing for few test cases
31+
class MedianFinder
32+
{
33+
34+
private PriorityQueue<int, int> smallHeap; //small elements - maxHeap
35+
private PriorityQueue<int, int> largeHeap; //large elements - minHeap
36+
37+
public MedianFinder()
38+
{
39+
smallHeap = new PriorityQueue<int, int>();
40+
largeHeap = new PriorityQueue<int, int>();
41+
}
42+
43+
public void addNum(int num)
44+
{
45+
smallHeap.Enqueue(num, num);
46+
if (
47+
smallHeap.Count - largeHeap.Count > 1 ||
48+
!(largeHeap.Count <= 0) &&
49+
smallHeap.Peek() > largeHeap.Peek()
50+
)
51+
{
52+
if (smallHeap.Count > 0)
53+
{
54+
int ele = smallHeap.Dequeue();
55+
largeHeap.Enqueue(ele, ele);
56+
}
57+
}
58+
if (largeHeap.Count - smallHeap.Count > 1)
59+
{
60+
if (largeHeap.Count > 0)
61+
{
62+
int ele = largeHeap.Dequeue();
63+
smallHeap.Enqueue(ele, ele);
64+
}
65+
}
66+
}
67+
68+
public double findMedian()
69+
{
70+
if (smallHeap.Count == largeHeap.Count)
71+
{
72+
return (double)(largeHeap.Peek() + smallHeap.Peek()) / 2;
73+
}
74+
else if (smallHeap.Count > largeHeap.Count)
75+
{
76+
return (double)smallHeap.Peek();
77+
}
78+
else
79+
{
80+
return (double)largeHeap.Peek();
81+
}
82+
}
83+
}
84+
*/

0 commit comments

Comments
 (0)