Top K

快速选择和堆排序都可以求解 Kth Element 和 TopK Elements 问题。

题见215. Kth Largest Element in an Array (Medium)

partition划分法

public int findKthLargest(int[] nums, int k) {
int j = -1;
int left = 0,right = nums.length - 1;
int target = right - k + 1;
while (j != target){
j = partition(nums,left,right);
if(j == target)
return nums[j];
else if(j < target){
left = j + 1;
}
else {
right = j - 1;
}
}
return nums[j];
}
//leetcode中看到的划分方法,简单易懂
public int partition(int[] nums,int start,int end){
int pivot = nums[start];
int j = start;
for(int i = start + 1;i <= end;i++){
if(nums[i] < pivot){
j++;
swap(nums,i,j);
}
}
swap(nums,j,start);
return j;
}
//经典快排划分方法,见《算法》和cyc2018
public int partition_custom(int[] nums,int start,int end){
int left = start,right = end + 1;
int pivot = nums[start];
while (true){
while (left < end && nums[++left] <= pivot);
while (right > start && nums[--right] >= pivot);//right永远不会超出范围
if(left >= right)
break;
swap(nums,left,right);
}
swap(nums,right,start);
return right;
} private void swap(int[] nums, int index1, int index2){
int temp = nums[index1];
nums[index1] = nums[index2];
nums[index2] = temp;
}

堆排序

public int findKthLargest_heap(int[] nums, int k) {
PriorityQueue<Integer> heap = new PriorityQueue<>();
for(int i = 0;i < nums.length;i++){
heap.offer(nums[i]);
}
for (int i = 0;i < nums.length - k;i++){
heap.poll();
}
return heap.peek();
}

简谈” Top K“的更多相关文章

  1. Top K问题-BFPRT算法、Parition算法

    BFPRT算法原理 在BFPTR算法中,仅仅是改变了快速排序Partion中的pivot值的选取,在快速排序中,我们始终选择第一个元素或者最后一个元素作为pivot,而在BFPTR算法中,每次选择五分 ...

  2. 海量数据处理的 Top K 相关问题

    Top-k的最小堆解决方法 问题描述:有N(N>>10000)个整数,求出其中的前K个最大的数.(称作Top k或者Top 10) 问题分析:由于(1)输入的大量数据:(2)只要前K个,对 ...

  3. [LeetCode] Top K Frequent Elements 前K个高频元素

    Given a non-empty array of integers, return the k most frequent elements. For example,Given [1,1,1,2 ...

  4. .NET简谈接口

    自从面向对象开发方式的出现,抽象的概念就开始日新月异的发展,面向对象编程.面向接口编程.面向组件编程等等:这一系列的概念都是软件工程所追求的思想范畴,高类聚低耦合. 今天我要简谈的是面向对象里面非常重 ...

  5. Leetcode 347. Top K Frequent Elements

    Given a non-empty array of integers, return the k most frequent elements. For example,Given [1,1,1,2 ...

  6. 大数据热点问题TOP K

    1单节点上的topK (1)批量数据 数据结构:HashMap, PriorityQueue 步骤:(1)数据预处理:遍历整个数据集,hash表记录词频 (2)构建最小堆:最小堆只存k个数据. 时间复 ...

  7. LeetCode "Top K Frequent Elements"

    A typical solution is heap based - "top K". Complexity is O(nlgk). typedef pair<int, un ...

  8. [IR] Ranking - top k

    PageRanking 通过: Input degree of link "Flow" model - 流量判断喜好度 传统的方式又是什么呢? Every term在某个doc中的 ...

  9. 347. Top K Frequent Elements

    Given a non-empty array of integers, return the k most frequent elements. For example,Given [1,1,1,2 ...

随机推荐

  1. OpenCV-Python SIFT尺度不变特征变换 | 三十九

    目标 在这一章当中, 我们将学习SIFT算法的概念 我们将学习找到SIFT关键点和描述算符. 理论 在前两章中,我们看到了一些像Harris这样的拐角检测器.它们是旋转不变的,这意味着即使图像旋转了, ...

  2. TensorFlow系列专题(二):机器学习基础

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/ ,学习更多的机器学习.深度学习的知识! 目录: 数据预处理 归一化 标准化 离散化 二值化 哑编码 特征 ...

  3. 50行代码实现GAN | 干货演练

    2014年,Ian Goodfellow和他的同事发表了一篇论文,向世界介绍了生成对抗网络(GAN).通过对计算图和博弈论的创新性组合,他们表明如果有足够的建模能力,两个相互对抗的模型可以通过普通的反 ...

  4. 树莓派 zeroWH 使用笔记

    更新raspbian    apt-get update    apt-get upgrade 删除python2    sudo rm /usr/bin/python安装python3    sud ...

  5. Spring中常用注解的介绍

    spring中使用注解时配置文件的写法: <?xml version="1.0" encoding="UTF-8"?> <span style ...

  6. springboot项目启动-自动创建数据表

    很多时候,我们部署一个项目的时候,需要创建大量的数据表.例如mysql,一般的方法就是通过source命令完成数据表的移植,如:source /root/test.sql.如果我们需要一个项目启动后, ...

  7. phpwind 安装下一步空白解决方案

    系统版本  centos 翻阅网上大部分都是php版本问题,让降级就行了,试了之后根本不行 其实再安装一个插件即可成功 如下: yum install -y php-mysql

  8. STL(六)——map、multimap

    STL--map.multimap 文章目录 STL--map.multimap 关联容器与map的介绍 map与set的异同 map与multimap的异同 map类对象的构造 map添加元素 ma ...

  9. Docker 常用命令(.NET Core示例)

    Docker安装 CentOS Docker 安装 安装 Docker Desktop for Mac.Docker Desktop for Windows 设置docker仓库镜像加速器 迁移Doc ...

  10. spring-cloud feign的多参数传递方案

    查看原文 一.GET请求多参数URL 1.方法一(推荐) @FeignClient(“microservice-provider-user”) public interface UserFeignCl ...