线性求第k大
快排变种.
快排每次只进行部分排序,进入左边或者右边或者当前mid就是答案.
据说期望值是O(n)
然后STL中的 nth_element也是用这个思想.
#include <cstdio>
// #include <windows.h> using namespace std; const int maxn = 1e6+; int arr[maxn];
int n, k; int _sort(int l, int r) { int mid = (l + r) / ;
int ll = l, rr = r;
int val;
val = arr[mid];
arr[mid] = arr[l];
while (l < r) {
while (arr[r] > val && l < r) r--;
arr[l] = arr[r];
while (arr[l] <= val && l < r) l++;
arr[r] = arr[l];
}
arr[l] = val;
if (l == k) return arr[l];
if (l - > ll && ll<=k && k<=l-) return _sort(ll, l-);
else if (rr > l + && l+<=k && k>=rr) return _sort(l+, rr);
else if (l- == k) return arr[l-];
else if (l+ == k) return arr[l+];
else return -;
} int main() {
//int n;
scanf("%d%d", &n, &k);
for (int i=; i<n; ++i) scanf("%d", &arr[i]);
k = n - k;
printf("%d \n", _sort(, n-));
// for(int i=0; i<n; ++i) printf("%d ", arr[i]);
// system("pause"); return ;
}
线性求第k大的更多相关文章
- 算法导论学习之线性时间求第k小元素+堆思想求前k大元素
对于曾经,假设要我求第k小元素.或者是求前k大元素,我可能会将元素先排序,然后就直接求出来了,可是如今有了更好的思路. 一.线性时间内求第k小元素 这个算法又是一个基于分治思想的算法. 其详细的分治思 ...
- 面试题:求第K大元素(topK)?
一.引言二.普通算法算法A:算法B:三.较好算法算法C:算法D:四.总结 一.引言 这就是类似求Top(K)问题,什么意思呢?怎么在无序数组中找到第几(K)大元素?我们这里不考虑海量数据,能装入内 ...
- poj 2985 The k-th Largest Group 树状数组求第K大
The k-th Largest Group Time Limit: 2000MS Memory Limit: 131072K Total Submissions: 8353 Accepted ...
- 《数据结构与算法分析:C语言描述》读书笔记------练习1.1 求第K大的数
求一组N个数中的第k个最大者,设k=N/2. import java.util.Random; public class K_Max { /** * @param args */ //求第K大的数,保 ...
- 快排法求第k大
快排法求第k大,复杂度为O(n) import com.sun.media.sound.SoftTuning; import java.util.Arrays; import java.util.Ra ...
- HDU 5249 离线树状数组求第k大+离散化
KPI Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HDU 2639 01背包求第k大
Bone Collector II Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- POJ 2985 Treap平衡树(求第k大的元素)
这题也能够用树状数组做,并且树状数组姿势更加优美.代码更加少,只是这个Treap树就是求第K大元素的专家--所以速度比較快. 这个也是从那本红书上拿的模板--自己找了资料百度了好久,才理解这个Trea ...
- BZOJ2006:超级钢琴(ST表+堆求前K大区间和)
Description 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出n个音符,编号为1至n.第i个音符的美妙度 ...
随机推荐
- Could not get JDBC Connection--java
postMan上调用合同服务,后台运行错误,如下: { "timestamp": 1536203887641, "status": 500, "err ...
- dreamware2018破解
dreamware2018破解 C:\Program Files\Adobe\Adobe Dreamweaver CC 2018
- hello2 源码分析
1.GreetingServlet.java(问候页面): /** * Copyright (c) 2014 Oracle and/or its affiliates. All rights rese ...
- day24_python_1124
1 复习 2 TCP-UDP协议 3 tcp协议的socket 4 复杂tcp协议的socket 5 带退出的聊天程序 6 时间练习demo 7 粘包现象 1.复习 # 网络编程概念# ...
- EChart.js 简单入门
EChart.js 简单入门 最近有一个统计的项目要做,在前端的数据需要用图表的形式展示.网上搜索了一下,发现有几种统计图库. MSChart 这个是Visual Studio里的自带控件,使用比 ...
- Sorting a Three-Valued Sequence(三值的排序)
Description 排序是一种很频繁的计算任务.现在考虑最多只有三值的排序问题.一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌序的时候. 在这个任务中可能的值只有三种1,2和3.我们用交换的 ...
- linux IPtable防火墙 禁止和开放端口
1.关闭所有的 INPUT FORWARD OUTPUT 只对某些端口开放.下面是命令实现: iptables -P INPUT DROPiptables -P FORWARD DROPiptable ...
- Ehlib 学习
似乎是为了垂直滚动条 SumList.Active := True; SumList.VirtualRecords := True; TDBGridEh 设计时 It is useful to use ...
- flask 第六章 人工智能 百度语音合成 识别 NLP自然语言处理+simnet短文本相似度 图灵机器人
百度智能云文档链接 : https://cloud.baidu.com/doc/SPEECH/index.html 1.百度语音合成 概念: 顾名思义,就是将你输入的文字合成语音,例如: from a ...
- ZABBIX安装过程中relocation error报错解决办法
错误提示: /usr/sbin/zabbix_server: relocation error: /usr/sbin/zabbix_server: symbol mysql_next_result, ...