STL----nth_element
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相关推荐
- 深海中的STL—nth_element
如果让你求区间第\(k\)大,你会怎么做呢? 主席树?确实是个不错的选择(不过像我这种垃圾还是乖乖打暴力吧) 在c++的stl库中,提供了nth_element这样一个函数 它的用法是nth_elem ...
- STL nth_element
nth_element(first,nth,last) first,last 第一个和最后一个迭代器,也可以直接用数组的位置. nth,要定位的第nn 个元素,能对它进行随机访问. 将第n_thn_ ...
- STL之nth_element__寻找第n大的元素
参考博客: STL nth_element神器 官方解释:http://www.cplusplus.com/reference/algorithm/nth_element/ nth_element(f ...
- BFPRT算法:时间复杂度O(n)求第k小的数字(分治算法+快排)
我自己搭建了博客,以后可能不太在CSDN上发博文了,https://www.qingdujun.com/ . 去年写了一篇<分治算法 求第kkk小元素 O(n)O(n)O(n) & O( ...
- 2017级算法模拟上机准备篇(一)
回顾一下往年的考题知识点: The Last Battle!! 2014级算法期末上机 简单题--I wanna be the 升级者Ⅰ 结构体排序 STL:sort() 简单题--I wanna ...
- STL中的nth_element()方法的使用
STL中的nth_element()方法的使用 通过调用nth_element(start, start+n, end) 方法可以使第n大元素处于第n位置(从0开始,其位置是下标为 n的元素),并且比 ...
- 利用向量叉积求三角形的面积(+STL:nth_element求第K大的数)
牛客寒假算法集训营2 https://ac.nowcoder.com/acm/contest/327/A A.处女座的签到题 题目描述 平面上有n个点,问:平面上所有三角形面积第k大的三角形的面积是多 ...
- C++11标准模板(STL)- 算法(std::nth_element)
定义于头文件 <algorithm> 算法库提供大量用途的函数(例如查找.排序.计数.操作),它们在元素范围上操作.注意范围定义为 [first, last) ,其中 last 指代要查询 ...
- stl的nth_element
/************************************************* 在区间[first,last)之间的数,第n大的数放在nth位置, 比nth小的数放在之前,大的数 ...
- Effective STL 50条有效使用STL的经验笔记
Scott Meyers大师Effective三部曲:Effective C++.More Effective C++.Effective STL,这三本书出版已很多年,后来又出版了Effective ...
最新文章
- 易点租加速电脑租赁市场布局
- 计算机网络最提出的优点是什么,2013年计算机一级B考试模拟试题十八及答案解析...
- 嵌入式应用开发第一阶段
- MyEclipse从数据库反向生成实体类之Hibernate方式 反向工程
- npz文件转为npy_Numpy_快速操作数组 4.4 数组的文件输入输出
- hadoop--MapReduce概述
- 百度2021年Q2净利润54亿元,智能云收入同比增71%
- 【报告分享】新基建专题报告:5g和数据中心的投资机会分析.pdf(附下载链接)...
- 黑马程序员--java基础知识注意点收录
- django1.10.3下admin后台管理老是显示object
- Atitit 发帖机实现(2)---usrQBN2243 文本解析到对象协议规范
- SpringApplication#run⽅法第5步,打印banner(四)
- 1.1 《数据库系统概论》之数据库系统概述(数据、数据库、数据库管理系统、数据库系统、数据库的产生和发展)
- c++ 显示三维散点图_办公小技巧:三维展示 用好Excel矩阵图
- html 套壳成桌面应用
- Python编程快速上手-让繁琐工作自动化 — 读书与代码笔记
- Windows Server 2012 磁盘管理
- vue手动封装分页组件
- 利用网络实现自己的六度人脉
- tongweb java_home_中标麒麟操作系统下部署 Web项目(Tongweb + DM)