Exemplo n.º 1
0
        /// <summary>
        /// 4. Median of Two Sorted Arrays
        /// <summary>
        public double FindMedianSortedArrays(int[] nums1, int[] nums2)
        {
            var totalLength = nums1.Length + nums2.Length;

            if (totalLength == 1)
            {
                return(nums1.Length > 0 ? nums1[0] : nums2[0]);
            }

            var sizeDiff = totalLength % 2;
            var minHeap  = new MinHeap(totalLength + 1);
            var maxHeap  = new MaxHeap(totalLength + 1);

            foreach (var n in nums1)
            {
                BuildHeap(minHeap, maxHeap, n);
            }
            foreach (var n in nums2)
            {
                BuildHeap(minHeap, maxHeap, n);
            }
            while (maxHeap.Size() != minHeap.Size() + sizeDiff)
            {
                if (maxHeap.Size() > minHeap.Size() + sizeDiff)
                {
                    minHeap.Offer(maxHeap.Poll());
                }
                else
                {
                    maxHeap.Offer(minHeap.Poll());
                }
            }

            return(sizeDiff == 0 ? (minHeap.Peek() + maxHeap.Peek()) / 2.0 : maxHeap.Peek());
        }
Exemplo n.º 2
0
 public void TestMaxHeapRemoveTop()
 {
     TestMaxHeapAdd();
     for (int i = 0; i < 3; i++)
     {
         Console.WriteLine(maxHeap.Poll() + " was removed");
         Console.WriteLine("next top is: " + maxHeap.Peek());
     }
 }