• 找中位数


    核心思想是搞两个堆,然后让数字在里面流动,每个堆存放一半的数据,0~100的话,就是0~50在左边的堆,是一个大堆,而51~100则是在右边的堆,是一个小堆,然后当左边和右边数据一样多的时候,新的数据应该插入左边的堆,然后挤出一个左边的大数到右边,这样的话,奇数个数字的时候,右边堆顶就是中位数;如果左右数据不一样多,那肯定是右边的数据多,那么就插入右边的堆,把右边堆的数字挤出一个到左边去,中位数等于两个堆顶的和

    https://leetcode-cn.com/problems/shu-ju-liu-zhong-de-zhong-wei-shu-lcof/

    import java.util.Comparator;
    import java.util.PriorityQueue;
    
    class MedianFinder {
        private PriorityQueue<Integer> maxQueue = new PriorityQueue<>();//最大堆
        private PriorityQueue<Integer> minQueue = new PriorityQueue<>(new Comparator<Integer>() {
            @Override public int compare(Integer o1, Integer o2) {
                return o2-o1;
            }
        });//最小堆
    
        /** initialize your data structure here. */
        public MedianFinder() {
        }
    
        public void addNum(int num) {
            if(maxQueue.size() == minQueue.size()) {
                minQueue.add(num);
                maxQueue.add(minQueue.poll());
            } else {
                maxQueue.add(num);
                minQueue.add(maxQueue.poll());
            }
        }
    
        public double findMedian() {
            return minQueue.size() == maxQueue.size() ? (maxQueue.peek() + minQueue.peek()) / 2.0 : maxQueue.peek() ;
        }
    }
    

      

  • 相关阅读:
    5-把自己的系统刷到开发板
    4-构建网络文件系统
    ipc
    advio
    pthread
    signal
    process_control
    python3.6+selenium_Testsuits测试套件
    python3.6+selenium_多个测试用例
    jQuery的九类选择器
  • 原文地址:https://www.cnblogs.com/iamzhoug37/p/12969956.html
Copyright © 2020-2023  润新知