标签:
Numbers keep coming, return the median of numbers at every time a new number added.
Have you met this question in a real interview?For numbers coming list: [1, 2, 3, 4, 5]
, return [1, 1, 2, 2, 3]
.
For numbers coming list: [4, 5, 1, 3, 2, 6, 0]
, return [4, 4, 4, 3, 3, 3, 3]
.
For numbers coming list: [2, 20, 100]
, return [2, 2, 20]
.
Total run time in O(nlogn).
What‘s the definition of Median?- Median is the number that in the middle of a sorted array. If there are n numbers in a sorted array A, the median isA[(n - 1) / 2]
. For example, if
A=[1,2,3]
, median is 2
. If A=[1,19]
, median is
1
.
[思路]
[CODE]
public class Solution { /** * @param nums: A list of integers. * @return: the median of numbers */ public int[] medianII(int[] nums) { // write your code here if(nums==null) return null; int[] res = new int[nums.length]; PriorityQueue<Integer> minHeap = new PriorityQueue<Integer>(); PriorityQueue<Integer> maxHeap = new PriorityQueue<Integer>(11, new Comparator<Integer>() { @Override public int compare(Integer x, Integer y) { return y-x; } }); res[0] = nums[0]; maxHeap.add(nums[0]); for(int i=1; i<nums.length; i++) { int x = maxHeap.peek(); if(nums[i] <= x) { maxHeap.add(nums[i]); } else { minHeap.add(nums[i]); } if(maxHeap.size() > minHeap.size()+1 ) { minHeap.add(maxHeap.poll()); } else if(maxHeap.size() < minHeap.size()) { maxHeap.add(minHeap.poll()); } res[i] = maxHeap.peek(); } return res; } }
lintcode 1: Data Stream Median
标签:
原文地址:http://blog.csdn.net/xudli/article/details/46389077