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


  • 相关阅读:
    RabbitMQ 入门
    Spring boot 2.x 中使用redis
    spring boot 中 Cache 的使用
    vbs 入门
    移动端文本框被原生键盘弹出后挡住文本框
    HTML中添加音乐video embed audio
    input修改placeholder文字颜色
    vue中更换.ico图标报错路径找不到图片
    Chrome表单文本框自动填充黄色背景色样式
    请求头缺少 'Access-Control-Allow-Origin'
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5030856.html
Copyright © 2020-2023  润新知