美文网首页
Top K问题,求最大的第K个数

Top K问题,求最大的第K个数

作者: 柴西卡夫卡 | 来源:发表于2019-07-13 12:26 被阅读0次

leetcode 215

leetcode 215

此题大概几种思路, 伪代码实现:

  1. 将n个数排序后,取最大的第k个数
sort(arr, 1, n);
return arr[k];

时间复杂度 O(nlogn)

  1. 利用冒泡进行局部排序,每冒泡一次,得到最大值,冒第k次泡,得到最后结果
for(i=1 to k){
     bubble_find_max(arr,i);
}
return arr[k];

时间复杂度 O(n*k)

  1. 借助小顶堆,堆顶元素为当前堆中最小的元素。然后扫描元素中如果大于堆顶元素,则替换,然后调整堆。最终堆顶元素即为第K大元素
heap[k] = make_heap(arr[1, k]);
for(i=k+1 to n){
     adjust_heap(heep[k],arr[i]);
}
return heap[0];

时间复杂度 O(n*logK)

  1. 快速随机选择算法。利用分治思想,通过类似快排中的partition。 partition过程:首先随机选择一个pivot, 通过与数组元素两两比较,最终pivot左边均小于pivot, 右边均大于pivot。 此时如果pivot右边元素数量 num >= k, 则第k大元素一定在右边,递归此partition过程, 求[pivot+1, high] 的第k大 ; 否则如果num < k, 则递归求左边[low, pivot-1] 的第 k - num -1大。
int RS(arr, low, high, k){
  if(low== high) return arr[low];
  pivot = partition(arr, low, high);
  num = n-pivot; //数组后半部分元素个数
  if(num>=k)
      return RS(arr, pivot+1, high, k); //求后半部分第k大
  else
      return RS(arr, low, pivot-1, k-num-1); //求前半部分第k-num-i大
}

由于递归只会执行其中一个分支, 在pivot随机的情况下,平均时间复杂度为O(n), 最坏情况下为O(n^2)

参考文章:
Top K 问题的最优解 - 快速选择算法(Quickselect)
拜托,面试别再问我TopK了

相关文章

  • Top K问题,求最大的第K个数

    leetcode 215 此题大概几种思路, 伪代码实现: 将n个数排序后,取最大的第k个数 时间复杂度 O(nl...

  • BFPTR算法-求TOP-K问题

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

  • 堆的应用

    堆排序 100个亿数中找出最小的前k个数(海量数据 Top k 问题)-->建大堆 100个亿数中找出最大的前k个...

  • topk算法问题的实现

    转自程序员编程艺术,topk实现算法 寻找最大的k个数的问题的实用范围更广,因为它牵扯到了一个Top K算法问题,...

  • K-th Smallest in Lexicographical

    题目来源给两个数字n和k,求按字母序排列的第k个数字。 Given integers n and k, find ...

  • BFPRT算法:求第K小或者第K大的数

    问题: 一个数组中求第k小或者第k大的数 思路(转自http://blog.csdn.net/liuxiao214...

  • 面试--算法--Top K

    原文:面试--算法--Top K 总结: 1、找出一个无序数组里面前K个最大数 插入排序 只找前K个数 或者...

  • 算法-位图排序

    0. Thanks 海量数据处理 - 10亿个数中找出最大的10000个数(top K问题) 从1亿个数字中取出最...

  • BFPRT详解(top-k问题)

    top-K问题指的是从一个数组中找出里面前k大或是前k小的问题。解决这类问题可以有以下的集中方法。 1、排序。排序...

  • 算法-数组(三)

    最小的k个数 求子数组的最大和 把数组排成最小的数字 1.最小的k个数 问题描述:输入n个数字,找到数组中最小的k...

网友评论

      本文标题:Top K问题,求最大的第K个数

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