首页 > 其他分享 >TopK

TopK

时间:2023-06-18 22:34:31浏览次数:29  
标签:arr return offer int queue TopK

这道题可以有很多延伸:(1)简单的TopK算法 (2)大文件无法一次加载进内存如何找出TopK数字 (3)大文件找出频率次数最高的K个数字 (4)系统设计:Top-K Hitter找出一定时段内点击量最高的视频、博文

1)简单的TopK算法

优先队列实现

class Solution {
    public int[] getLeastNumbers(int[] arr, int k) {
        int[] ans = new int[k];

        PriorityQueue<Integer> queue = new PriorityQueue<>((o1,o2)-> o2-o1);

        for(int i = 0; i < k; i++){
            queue.offer(arr[i]);
        }

        for(int i = k; i < arr.length; i++){
            // queue.offer(arr[i]);
            // queue.poll();

            if(queue.peek()>arr[i]){
                queue.poll();
                queue.offer(arr[i]);
            }
        }

        for(int i=0; i<k; i++){
            ans[i] = queue.poll();
        }
        return ans;
    }
}

快速排序实现

class Solution {
    public int[] getLeastNumbers(int[] arr, int k) {
        if (k >= arr.length) return arr;
        return quickSort(arr, k, 0, arr.length - 1);
    }
    private int[] quickSort(int[] arr, int k, int l, int r) {
        int i = l, j = r;
        while (i < j) {
            while (i < j && arr[j] >= arr[l]) j--;
            while (i < j && arr[i] <= arr[l]) i++;
            swap(arr, i, j);
        }
        swap(arr, i, l);
        if (i > k) return quickSort(arr, k, l, i - 1);
        if (i < k) return quickSort(arr, k, i + 1, r);
        return Arrays.copyOf(arr, k);
    }
    private void swap(int[] arr, int i, int j) {
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }
}

参考:
链接:https://leetcode.cn/problems/zui-xiao-de-kge-shu-lcof/solutions/1/jian-zhi-offer-40-zui-xiao-de-k-ge-shu-j-9yze/
来源:力扣(LeetCode)

(4)系统设计:Top-K Hitter找出一定时段内点击量最高的视频、博文

标签:arr,return,offer,int,queue,TopK
From: https://www.cnblogs.com/chenyi502/p/17489896.html

相关文章

  • pytorch -- topk()
    torch.topk(input,k,dim=None,largest=True,sorted=True,out=None)->(Tensor,LongTensor) pytorch中文官网文档:http://www.mamicode.com/info-detail-2217311.html沿给定dim维度返回输入张量input中 k 个最大值。如果不指定dim,则默认为input的最后一维。如果为largest......
  • splunk的统计分析功能——特定字段的统计功能包括取值分布(+topK,min/max/平均值)
    特定字段的统计功能——取值分布,topK,min/max/平均值例如:date_second60值,100%的事件时段平均值时段最大值时段最小值上限值时段上限值罕见值具有此字段的事件平均: 30.963998最小值: 0最大值: 59标准 偏差: 17.300073前10个值计数% 50643.032% 51502.368% 22492.321%......
  • 实现堆,堆排序,解决堆的TOPK问题
    这篇博客我会尽我自己的所能讲解堆,同时详细的解释堆中重要的向下和向上调整算法,以及推排序的两种实现方法,和堆的TOPK问题。堆是什么我们之前已经介绍过了树,而堆就是一种完全二叉树。这里我放一张二叉树的图下面我来解释一下满二叉树,和完全二叉树的区别:满二叉树是指除了叶子节点外,每......
  • 算法练习:TopK_1
    问题描述求一维数组中最小的K个数。 方法一:排序先把数组从小到大排序,取前K个数。时间复杂度为O(nlogn)。如果数组过大,机器内存无法同时容纳整个数组,则需要使用外部排序。以......
  • 堆排序+TOPK问题
    (文章目录)一.堆排序1.使用向上还是向下调整建堆好?(1)向上调整算法建堆的时间复杂度voidadjustup(HPDatatype*a,intchild)//向上调整算法{ intparent=(child-......
  • 优先队列--著名的TopK问题(最小堆的使用)
    692. TopKFrequentWordsMedium77671FavoriteShareGivenanon-emptylistofwords,returnthe k mostfrequentelements.Youranswershouldbesortedbyfrequen......
  • 海量数字topK
    importrandomimportheapqn=100k=10nums=[iforiinrange(n)]random.shuffle(nums)deftopk(nums,k):heap=[]foriinrange(k):he......