堆--Top K

作者: 暮想sun | 来源:发表于2020-01-08 23:03 被阅读0次

求数组中前k大的数据
思路:维护一个数据大小为k的小顶堆,循环遍历数组,如果比堆顶元素大,我们就把堆顶元素删除,并且将这个元素插入到堆中;如果比堆顶元素小,则不做处理,继续遍历数组。这样等数组中的数据都遍历完之后,堆中的数据就是前 K 大数据了。

public static int[] topK(int[] data, int k) {
        //初始化top数据
        int[] topK = new int[k];
        for (int i = 0; i < k; i++) {
            topK[i] = data[i];
        }
        smallHeapAdjust(topK);

        for (int i = k; i < data.length; i++) {

            //如果该数据比堆顶元素大,则替换堆顶元素。调整堆
            if (data[i] > topK[0]) {
                topK[0] = data[i];
                smallHeapAdjust(topK);
            }

        }

        return topK;

    }

    public static void smallHeapAdjust(int[] data) {
        int temp = data[0];
        int index = 0;
        for (int i = index * 2 + 1; i < data.length; i = i * 2 + 1) {
            if (i + 1 < data.length && data[i] > data[i + 1]) {
                //左孩子节点大于右孩子节点,指向右孩子
                i++;
            }

            //如果该结点比最小的孩子节点小,退出
            if (temp < data[i]) {
                break;
            }

            //将最小的孩子结点的值赋值给该结点
            data[index] = data[i];
            index = i;
        }

        data[index] = temp;
    }

相关文章

  • 堆--Top K

    求数组中前k大的数据思路:维护一个数据大小为k的小顶堆,循环遍历数组,如果比堆顶元素大,我们就把堆顶元素删除,并且...

  • TOP-K 堆实现

    题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是...

  • 《恋上数据结构与算法一》笔记(十六)堆

    目录 问题思考 Top K问题 堆(Heap) 堆的基本接口设计 二叉堆(Binary Heap) 获取最大值 最...

  • 堆的更新/top K问题

    在面老虎集团的时候被问到:已知昨天100万股票的前10名,今天股票更新了,我想知道今天的前10名,当时一脸懵逼。甚...

  • Python一天一模块: heapq 堆列队方法

    heapq是一个内建模块, 实现了一个堆的数据结构,完美的解决了Top-K问题,以后解决Top-K问题的时候,直接...

  • 2018-05-17

    学习DHT时候的问题 1.peers和nodeid的区别。 2.top k问题用堆解决,查询复杂度为O(k + (...

  • 在一个无序数组中找到第k大的数

    这里是用了最小堆保存当前最大的k个数,堆顶即为top k中最小的数,每次和堆顶的数比较即可,实现直接用了stl的m...

  • TopK问题的思考

    1、问题 什么是 Top K 问题?简单来说就是在一堆数据里面找到前 K 大(当然也可以是前 K 小)的数。这是一...

  • tf.nn.in_top_k/tf.nn.top_k

    tf.nn.in_top_k correct = tf.nn.in_top_k(logits, labels, k...

  • 算法必学:经典的 Top K 问题

    什么是 Top K 问题?简单来说就是在一堆数据里面找到前 K 大(当然也可以是前 K 小)的数。这个问题也是十分...

网友评论

    本文标题:堆--Top K

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