美文网首页
Top K问题

Top K问题

作者: 王王王王王景 | 来源:发表于2019-07-22 20:49 被阅读0次

参考网站

在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
        srand(time(NULL));
        return findK(nums, 0, nums.size() - 1, k);
    }
    
    int findK(vector<int>& nums, int l, int r, int k) {
        int re = partition(nums, l, r);
        if(re == nums.size() - k) return nums[re];
        else if(re < nums.size() - k) return findK(nums, re + 1, r, k);
        else return findK(nums, l, re - 1, k);
    }
    
    // 快速排序的分治思想
    int partition(vector<int>& nums, int l, int r) {
        int base = (rand() % (r - l + 1)) + l;
        swap(nums[l], nums[base]);
        int i = l+1, j = r;
        while(i <= j) {
            while(i <= r && nums[i] <= nums[l])
                ++i;
            while(j >= l && nums[j] >= nums[l])
                --j;
            if(i <= r && j >= l && i < j)
                swap(nums[i], nums[j]);
            else
                ++i;
        }
        if(j > l) {
            swap(nums[l], nums[j]);
            return j;
        }else return l;
        
    }
};

相关文章

  • top K问题

    问题:海量数据处理 - 10亿个数中找出最大的10000个数。解决方案:先拿10000个数建堆,然后一次添加剩余元...

  • Top K问题

    新文集等待补充

  • Top K 问题

    问题描述 有N(N>>10000)个整数,求出其中的前K个最大的数。 问题分析 需要前K个最大数,一定会有比较的过...

  • Top K 问题

  • Top K问题

    参考网站 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第...

  • TOP k问题

    (1) 最小堆方法 #include using namespace std; void heap_adjust(...

  • BFPTR算法-求TOP-K问题

    BFPTR算法-求TOP-K问题 求TOP-K问题最简单的方式为快速排序后取前K大的即可。但是这样做有两个问题 快...

  • JavaScript BFPRT 算法

    BFPRT 算法 背景 在一组数中求其前 k 小的数,简称TOP-K问题。而目前解决TOP-K问题最有效的算法即是...

  • Top K问题——Parition算法

    Top K问题概述 在非海量数据的情况下,Top K问题的首推解法就是快排中的Parition算法。不仅平均时间复...

  • 必考算法之 Top K 问题

    大家好,这里是《齐姐聊算法》系列之 Top K 问题。 Top K 问题是面试中非常常考的算法题。 Leetcod...

网友评论

      本文标题:Top K问题

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