C# 94.5%
\npublic class MedianFinder \n{\n    List<int> Numbers;\n    \n    public MedianFinder() \n    {\n        Numbers = new List<int>();\n    }\n    \n    public vo
````\npublic class MedianFinder \n{\n    List<int> Numbers;\n    \n    public MedianFinder() \n    {\n        Numbers = new List<int>();\n    }\n    \n    public void AddNum(int num) \n    {\n        // Find where to insert this num in Numbers using Binary Search\n        // NOTE: Binary Search is logarithmic time complexity O(logn) \n        int position = Numbers.BinarySearch(num);\n        \n        // So if BinarySearch returns -1 it means we should insert at the first position\n        if (position < 0)\n        {\n            position = ~position; // Bitwise complement of -1 is 0\n        }\n        \n        Numbers.Insert(position, num);\n    }\n    \n    public double FindMedian() \n    {\n        int count = Numbers.Count;\n        if (count % 2 == 0)\n        {\n            // Even number of elements\n            return (double)((Numbers[count / 2 - 1] + Numbers[count / 2]) * 0.5);\n        }\n        else\n        {\n            // Odd number of elements\n            return (double)(Numbers[count / 2]);\n        }            \n    }\n}\n\n/**\n * Your MedianFinder object will be instantiated and called as such:\n * MedianFinder obj = new MedianFinder();\n * obj.AddNum(num);\n * double param_2 = obj.FindMedian();\n */\n ````
[]