Skip to content

Commit 5458b9e

Browse files
committed
Update Solution.cs
1 parent dcc257a commit 5458b9e

File tree

1 file changed

+7
-36
lines changed
  • solution/0200-0299/0295.Find Median from Data Stream

1 file changed

+7
-36
lines changed

solution/0200-0299/0295.Find Median from Data Stream/Solution.cs

Lines changed: 7 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,21 @@
11
public class MedianFinder {
2-
private List<int> nums;
3-
private int curIndex;
2+
private PriorityQueue<int, int> minQ = new PriorityQueue<int, int>();
3+
private PriorityQueue<int, int> maxQ = new PriorityQueue<int, int>(Comparer<int>.Create((a, b) => b.CompareTo(a)));
44

5-
/** initialize your data structure here. */
65
public MedianFinder() {
7-
nums = new List<int>();
8-
}
96

10-
private int FindIndex(int val) {
11-
int left = 0;
12-
int right = nums.Count - 1;
13-
while (left <= right) {
14-
int mid = left + (right - left) / 2;
15-
if (val > nums[mid]) {
16-
left = mid + 1;
17-
} else {
18-
right = mid - 1;
19-
}
20-
}
21-
return left;
227
}
238

249
public void AddNum(int num) {
25-
if (nums.Count == 0) {
26-
nums.Add(num);
27-
curIndex = 0;
28-
} else {
29-
curIndex = FindIndex(num);
30-
if (curIndex == nums.Count) {
31-
nums.Add(num);
32-
} else {
33-
nums.Insert(curIndex, num);
34-
}
10+
maxQ.Enqueue(num, num);
11+
minQ.Enqueue(maxQ.Peek(), maxQ.Dequeue());
12+
if (minQ.Count > maxQ.Count + 1) {
13+
maxQ.Enqueue(minQ.Peek(), minQ.Dequeue());
3514
}
3615
}
3716

3817
public double FindMedian() {
39-
if (nums.Count % 2 == 1) {
40-
return (double)nums[nums.Count / 2];
41-
} else {
42-
if (nums.Count == 0) {
43-
return 0;
44-
} else {
45-
return (double) (nums[nums.Count / 2 - 1] + nums[nums.Count / 2]) / 2;
46-
}
47-
}
18+
return minQ.Count == maxQ.Count ? (minQ.Peek() + maxQ.Peek()) / 2.0 : minQ.Peek();
4819
}
4920
}
5021

0 commit comments

Comments
 (0)