在这里利用了C++的几个函数(这几个API接口需要algorithm):

分享一下如何使用STL里的heap(堆)算法。堆是一个完全二叉树。在STL中,heap是算法的形式提供给我们使用的。包括下面几个函数:

四个最常用的API接口

make_heap: 根据指定的迭代器区间以及一个可选的比较函数,来创建一个heap. O(N).

push_heap: 把指定区间的最后一个元素插入到heap中. O(logN).

pop_heap: 弹出heap顶元素, 将其放置于区间末尾. O(logN).

sort_heap:堆排序算法,通常通过反复调用pop_heap来实现. N*O(logN).

*注:

C++11加入了两个新成员:

is_heap: 判断给定区间是否是一个heap. O(N)

is_heap_until: 找出区间中第一个不满足heap条件的位置. O(N)

因为heap以算法的形式提供,所以要使用这几个api需要包含 #include

class Solution {

public:

void adjust2(vector &arr,int pos,int size){

int left = 2*pos+1;

int right = 2*pos+2;

int index = pos;

if(left

if(right < size && arr[index]

if(index != pos){

swap(arr[index],arr[pos]);

adjust2(arr,index,size);

}

return;

}

void make_heap2(vector &arr){

for(int i=arr.size()-1;i>=1;i--){

swap(arr[0],arr[i]);

adjust2(arr,0,i);

}

}

vector getLeastNumbers(vector& arr, int k) {

vector tmp;

if(k==0) return tmp;

for(int i=0;i

tmp.push_back(arr[i]);;

}

make_heap(tmp.begin(),tmp.end(),less());

for(int i=k;i

if(arr[i]

tmp[0] = arr[i];

adjust2(arr,0,k);

}

}

make_heap2(tmp);

return tmp;

}

};

java堆排序解决topk问题,利用堆排序来解决topK问题相关推荐

  1. 堆排序--采用快速排序(利用大堆实现升序,小堆实现降序)

    对堆进行排序,利用大堆实现升序,小堆实现降序.例如升序的实现,将较大数据存放在最后面,依次往前存放数据.具体为交换第一个元素和最后一个元素,再将不包含最后一个元素的堆进行下调,使堆保持大堆,将最大数据 ...

  2. 利用NATAPP隧道解决微信公众号开发之本地调试难题

    文章目录 公众号的分类 微信公众平台: 编辑模式 开发模式 开发模式配置流程 1.登录测试号页面,可以看到该测试号相关的信息 2.配置参数介绍 3.搭建本地应用(java/python/php等语言均 ...

  3. Java(web)项目安全漏洞及解决方式【面试+工作】

    Java(web)项目安全漏洞及解决方式[面试+工作] 一.安全性问题层次关系 大家经常会听到看到很多很多有关安全性方面的信息,可以说形形色色,对于在网络安全方面不太专业的同志来说,有点眼花缭乱,理不 ...

  4. Python利用A*算法解决八数码问题

    资源下载地址:https://download.csdn.net/download/sheziqiong/86790565 资源下载地址:https://download.csdn.net/downl ...

  5. Java多线程基础-6:线程安全问题及解决措施,synchronized关键字与volatile关键字

    线程安全问题是多线程编程中最典型的一类问题之一.如果多线程环境下代码运行的结果是符合我们预期的,即该结果正是在单线程环境中应该出现的结果,则说这个程序是线程安全的. 通俗来说,线程不安全指的就是某一代 ...

  6. JAVA Web项目中所出现错误及解决方式合集(不断更新中)

    JAVA Web项目中所出现错误及解决方式合集 前言 一.几个或许会用到的软件下载官网 二.Eclipse的[preferences]下没有[sever]选项 三.Tomcat的安装路径找不到 四.T ...

  7. com/opensymphony/xwork2/spring/SpringObjectFactory.java:220:-1问题出现的原因及解决办法

    转自:https://blog.csdn.net/shinchan_/article/details/37818927 com/opensymphony/xwork2/spring/SpringObj ...

  8. Java中的OutOfMemoryError的各种情况及解决方法

    转载自博客园:https://www.cnblogs.com/duanxz/p/4901437.html Java中的OutOfMemoryError的各种情况及解决和JVM内存结构 在JVM中内存一 ...

  9. opengl中的Floatbuffer和IntBuffer与java中数据的存储方式不同的解决方法,编辑一个自己的BufferUtil工具类

    opengl中的Floatbuffer和IntBuffer与java中数据的存储方式不同的解决方法,编辑一个自己的BufferUtil工具类 参考文章: (1)opengl中的Floatbuffer和 ...

最新文章

  1. Excel中将一个表格的数据关联到另一个表格
  2. Java8 stream操作
  3. 用python抓取糗事百科的小程序
  4. AWS服务器自动化迁移工具指南
  5. C++ Primer 5th笔记(chap 17 标准库特殊设施)随机数
  6. css 选择一列表菜单,css实现菜单列表随滚动条指定到对应内容
  7. 在wp中,使用NavigationService.Navigate导航页面出现错误
  8. linux两个数字正则,正则表达式-Linux readelf显示具有不同数字系...
  9. java输入方法有哪些内容_java 键盘输入多种方法
  10. 5年5亿美金,一年送出 1000 张训练卡,华为昇腾如何吸引AI开发者?
  11. 利用绝对定位和相对定位对CSS中区块进行位置调整
  12. Win 2000系统引导过程详解
  13. mac中插入带圆圈数字序号①②③
  14. 数据结构算法—递归算法求二叉树的叶子结点(C语言)
  15. 360浏览器截图快捷键设置
  16. Attach Debugger
  17. 天地图 政府内网 代理
  18. ToDesk for Mac v4.2.1 中文版 远程控制软件
  19. js阻止事件的默认行为发生的三种方式
  20. 计算机控制 采样电路,计算机模拟量的采样与处理

热门文章

  1. 临键锁如何实现幻读_如何用Redis实现分布式锁?
  2. html5善于盒模型定位,2个小时上手html+css-003盒模型和定位
  3. java返回类型自动_java-Apache Flink:由于类型擦除,无法自动确定函数的返回类型...
  4. php socket 不能用,PHP无法用Socket方式连接MySQ
  5. js判断定时器是否启动_原生js如何做出轮播图的效果
  6. android 抽屉侧滑冲突,利用DrawerLayout和触摸事件分发实现抽屉侧滑效果
  7. 计算机管理游戏,网吧游戏管理系统
  8. php写简单接口_php写接口,对比两种写法
  9. Catalyst 5.8: the Perl MVC Framework
  10. CentOS查看分区的方式