nth_element      复杂度O(n)

nth_element是<algorithm>里面的一个库函数

可以用来方便的求出第n大的数

用法

nth_element(a+L, a+n,a+R )          范围是  [ L , R )

nth_element并不会为整个数列排序

而是调用nth_element(a+L, a+n,a+R ) 方法之后呢

第n个位置(L是第0个位置 从L开始数的第n个)的数  前边都是比他小的  后边都是比他大的

(将比这个元素小的元素都排在这个元素之前,比这个元素大的元素都排在这个元素之后)

举个栗子

这段代码的执行结果呢是

从0开始数  0,1,2,3,4,5   a [ 5 ]的位置上的数  前边的都比他小  后边的都比他大

这个函数就是这么一个效果

那么我们怎么用这个函数找数列中第k大的数呢?

既然是第k大  那么比他还大的数就有k-1个  应该排在他后边

那么他就是就从后往前数的第k个数   也就是正着数的第n-k个数

那么我们就用   nth_element(a+0 , a+n-k , a+n ) 

用数组的写法


//使用nth_element求数组中第k大的数
#include<bits/stdc++.h>
using namespace std;
int main(){int a[10]={9,8,7,6,5,4,3,2,1,0};int k;while(~scanf("%d",&k)){nth_element(a+0,a+10-k,a+10);printf("数列中第%d大的数是  %d\n",k,a[10-k]);}
}

执行结果

使用容器的写法

//使用nth_element求数组中第k大的数
#include<bits/stdc++.h>
using namespace std;
int main(){vector<int>a;for(int i=0;i<10;i++){a.push_back(i);}int k;scanf("%d",&k);nth_element(a.begin(),a.begin()+a.size()-k,a.end());printf("数列中第%d大的数是  %d\n",k,a[a.size()-k]);
}

执行结果

STL----nth_element相关推荐

  1. 深海中的STL—nth_element

    如果让你求区间第\(k\)大,你会怎么做呢? 主席树?确实是个不错的选择(不过像我这种垃圾还是乖乖打暴力吧) 在c++的stl库中,提供了nth_element这样一个函数 它的用法是nth_elem ...

  2. STL nth_element

    nth_element(first,nth,last) first,last 第一个和最后一个迭代器,也可以直接用数组的位置.  nth,要定位的第nn 个元素,能对它进行随机访问. 将第n_thn_ ...

  3. STL之nth_element__寻找第n大的元素

    参考博客: STL nth_element神器 官方解释:http://www.cplusplus.com/reference/algorithm/nth_element/ nth_element(f ...

  4. BFPRT算法:时间复杂度O(n)求第k小的数字(分治算法+快排)

    我自己搭建了博客,以后可能不太在CSDN上发博文了,https://www.qingdujun.com/ . 去年写了一篇<分治算法 求第kkk小元素 O(n)O(n)O(n) & O( ...

  5. 2017级算法模拟上机准备篇(一)

    回顾一下往年的考题知识点: The Last Battle!! 2014级算法期末上机 简单题--I wanna be the 升级者Ⅰ 结构体排序  STL:sort() 简单题--I wanna ...

  6. STL中的nth_element()方法的使用

    STL中的nth_element()方法的使用 通过调用nth_element(start, start+n, end) 方法可以使第n大元素处于第n位置(从0开始,其位置是下标为 n的元素),并且比 ...

  7. 利用向量叉积求三角形的面积(+STL:nth_element求第K大的数)

    牛客寒假算法集训营2 https://ac.nowcoder.com/acm/contest/327/A A.处女座的签到题 题目描述 平面上有n个点,问:平面上所有三角形面积第k大的三角形的面积是多 ...

  8. C++11标准模板(STL)- 算法(std::nth_element)

    定义于头文件 <algorithm> 算法库提供大量用途的函数(例如查找.排序.计数.操作),它们在元素范围上操作.注意范围定义为 [first, last) ,其中 last 指代要查询 ...

  9. stl的nth_element

    /************************************************* 在区间[first,last)之间的数,第n大的数放在nth位置, 比nth小的数放在之前,大的数 ...

  10. Effective STL 50条有效使用STL的经验笔记

    Scott Meyers大师Effective三部曲:Effective C++.More Effective C++.Effective STL,这三本书出版已很多年,后来又出版了Effective ...

最新文章

  1. 易点租加速电脑租赁市场布局
  2. 计算机网络最提出的优点是什么,2013年计算机一级B考试模拟试题十八及答案解析...
  3. 嵌入式应用开发第一阶段
  4. MyEclipse从数据库反向生成实体类之Hibernate方式 反向工程
  5. npz文件转为npy_Numpy_快速操作数组 4.4 数组的文件输入输出
  6. hadoop--MapReduce概述
  7. 百度2021年Q2净利润54亿元,智能云收入同比增71%
  8. 【报告分享】新基建专题报告:5g和数据中心的投资机会分析.pdf(附下载链接)...
  9. 黑马程序员--java基础知识注意点收录
  10. django1.10.3下admin后台管理老是显示object
  11. Atitit 发帖机实现(2)---usrQBN2243 文本解析到对象协议规范
  12. SpringApplication#run⽅法第5步,打印banner(四)
  13. 1.1 《数据库系统概论》之数据库系统概述(数据、数据库、数据库管理系统、数据库系统、数据库的产生和发展)
  14. c++ 显示三维散点图_办公小技巧:三维展示 用好Excel矩阵图
  15. html 套壳成桌面应用
  16. Python编程快速上手-让繁琐工作自动化 — 读书与代码笔记
  17. Windows Server 2012 磁盘管理
  18. vue手动封装分页组件
  19. 利用网络实现自己的六度人脉
  20. tongweb java_home_中标麒麟操作系统下部署 Web项目(Tongweb + DM)

热门文章

  1. (C++)String的用法
  2. MYSQL 取上一条记录,与下一条记录
  3. ntldr is missing什么意思应该如何解决
  4. WebStart啟動程式在關閉時關閉javaw進程
  5. Android客户端实现session会话过期的功能
  6. java初学者,应该怎么去学习?
  7. centos mysql
  8. javaScript之函数,分支结构 ,循环结构(二)
  9. openstack service glance-api/registry mysql of max_connection
  10. python 学习第十二课