zoukankan      html  css  js  c++  java
  • lintcode 1: Data Stream Median

    Data Stream Median

    Numbers keep coming, return the median of numbers at every time a new number added.

    Have you met this question in a real interview?

    Example

    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].

    Challenge

    Total run time in O(nlogn).

    Clarification

    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.

    [思路]

    用两个堆, max heap 和 min heap. 维持两个堆的大小相等(max堆能够比min堆多一个).  则max堆的顶即为median值.

    [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;
        }
    }
    


  • 相关阅读:
    好多天没写了,郁闷
    昨天很受教育
    恼火的服务器
    欢迎访问我的博客网站
    体育产品论坛
    参考书目
    web2.0与数字标准
    用户产生内容与网站做内容
    Using x++ code reading data from csv file format
    Find out specified the folder for all the files
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5030856.html
Copyright © 2011-2022 走看看