美文网首页
返回数据流中,第k大的数

返回数据流中,第k大的数

作者: JohnsonZzzz | 来源:发表于2019-10-15 17:21 被阅读0次

问题:

数组int arr[]={3,4,7,1,5,6,9,2,8,0,...}数据流中,如何得到第k大的数?

分析:

比如说返回第2大的数,{3,4}中第二大的数就是3,{3,4,7}中第二大的数就是4..

方法一:

最简单直接的方法就是每新增一个数,将数组排序,之后取其中第二大的元素,时间复杂度为 N.KlogK,效率相对比较低。

方法二:

利用小顶堆特性(minHeap),使得堆的个数等于K。
每次进来一个数都与堆顶进行比较,小于等于堆顶元素就不用管了,没得比,第K大的数就是堆顶元素,大于堆顶元素,那就踢掉堆顶元素,加入新的元素进行堆排,得到新的堆顶元素就是第K大的元素。时间复杂度为N.logK。相比方法一要优化一些,贴一下代码:

/**
 * 返回数据流中,第k大的数。
 */
public class KthLargest {
    public static void main(String[] args){
        int arr[]={3,4,7,1,5,6,9,2,8,0};
        new KthLargest(3, arr);
    }
    final PriorityQueue<Integer> q;
    final int k;
    public KthLargest(int k,int[] arr) {
        this.k = k;
        this.q = new PriorityQueue<>(k);
        for (int x : arr)
            System.out.println(x+"进来,"+"第"+k+"大的数是"+add(x));
    }
    public int add(int x){
        if (q.size() < k) {
            q.offer(x);
        } else if (q.peek() < x) {
            q.poll();
            q.offer(x);
        }
        return q.peek();//第k大的数就是它了
    }
}

运行结果:

3进来,第3大的数是3
4进来,第3大的数是3
7进来,第3大的数是3
1进来,第3大的数是3
5进来,第3大的数是4
6进来,第3大的数是5
9进来,第3大的数是6
2进来,第3大的数是6
8进来,第3大的数是7
0进来,第3大的数是7

相关文章

  • 返回数据流中,第k大的数

    问题: 数组int arr[]={3,4,7,1,5,6,9,2,8,0,...}数据流中,如何得到第k大的数? ...

  • 数组

    第K大的数 第K大的数1.快排:每次返回的是标准的index,当index=k-1时就返回,不是就遍历一边2.堆排...

  • Leetcode 703 数据流中的第K大元素

    数据流中的第K大元素 题目 设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个...

  • 数据流中的第K大元素

    数据流中的第K大元素 设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。

  • LeetCode 703. 数据流中的第K大元素

    703. 数据流中的第K大元素 设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第...

  • Day74:数据流中的第K大元素

    Day74:数据流中的第K大元素 设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是...

  • LeetCode 215. Kth Largest Elemen

    @(LeetCode) 问题描述 找出数组中第 k 个最大的数。注意是数组排序后第 k 大的数,而不是去重后的第 ...

  • Leetcode.215.Kth Largest Element

    题目 给定一个数组, 输出第k大的数. 思路 进行从大到小排序, 第k-1即为第k大的数. 总结 掌握快速排序.

  • 优先队列

    堆的类型以及时间复杂度 返回数据流的第K大元素 https://leetcode-cn.com/problems/...

  • 第四章 函数

    1.在给定的数中从右边查找第K位数字【问题描述】设计一个函数int digit(long n,int k),它返回...

网友评论

      本文标题:返回数据流中,第k大的数

      本文链接:https://www.haomeiwen.com/subject/xwwsmctx.html