求第K大数(分治)
题意:已知N个数,求第K大数。
分析:
1、复杂度O(n)。
2、利用快排中划分的原理,每次划分以序列中第一个数x为标准,将序列划分为{比x大的数}x{比x小的数}。
3、若集合{比x大的数}中元素为k-1个,则x为第k大数。
若集合{比x大的数}中元素大于k-1个,则第k大数在集合{比x大的数}中,根据分治的思想,继续划分集合{比x大的数}。
若集合{比x大的数}中元素小于k-1个,则x为第k大数在集合{比x小的数}中,根据分治的思想,继续划分集合{比x小的数}。
#include<bits/stdc++.h>
using namespace std;
int a[] = {12, 25, 64, 95, 1234, 852, 15, 66, 153, 123, 324, 513};
int Partition(int L, int R){
int tmp = a[L];
int pos = a[L];
while(L < R){
while(L < R && a[R] <= pos) --R;
a[L] = a[R];
while(L < R && a[L] >= pos) ++L;
a[R] = a[L];
}
a[L] = tmp;
return L;
}
int Find(int L, int R, int k){
int tmp = Partition(L, R);
for(int i = 0; i < 12;++i){
printf("%d=",a[i]);
}
printf("\n");
if(tmp + 1 == k){
return a[tmp];
}
else if(tmp + 1 > k){
Find(L, tmp - 1, k);
}
else{
Find(tmp + 1, R, k);
}
}
int main(){
int k;
scanf("%d", &k);
printf("第%d大数为%d\n", k, Find(0, 11, k));
return 0;
}
求第K大数(分治)的更多相关文章
- 普林斯顿大学算法课 Algorithm Part I Week 3 求第K大数 Selection
问题 给定N个元素的数组,求第k大的数. 特例当k=0时,就是求最大值,当k=N-1时,就是求最小值. 应用顺序统计求top N排行榜 基本思想 使用快速排序方法中的分区思想,使得a[k]左侧没有更小 ...
- [nowCoder] 两个不等长数组求第K大数
给定两个有序数组arr1和arr2,在给定一个整数k,返回两个数组的所有数中第K小的数.例如:arr1 = {1,2,3,4,5};arr2 = {3,4,5};K = 1;因为1为所有数中最小的,所 ...
- 求第K大数
1.排序找第K个数 2.快速排序分块 时间复杂度 2呢
- 寻找数组中第K大数
1.寻找数组中的第二大数 using System; using System.Collections.Generic; using System.Linq; using System.Text; u ...
- 线性时间求取第 K 大数
求 Top K 的算法主要有基于快速排序的和基于堆的这两种,它们的时间复杂度都为 \(O(nlogK)\).借助于分治思想,以及快速排序的区间划分,我们可以做到 \(O(n)\) 时间复杂度.具体算法 ...
- [csu/coj 1080]划分树求区间前k大数和
题意:从某个区间内最多选择k个数,使得和最大 思路:首先题目给定的数有负数,如果区间前k大出现负数,那么负数不选和更大,于是对于所有最优选择,负数不会出现,所以用0取代负数,问题便转化为区间的前k大数 ...
- 分治算法--寻找第k大数
问题描述:给定线性序集中n个元素和一个整数k,1≤k≤n,要求找出这n个元素中第k大的元素,(这里给定的线性集是无序的). 其实这个问题很简单,直接对线性序列集qsort,再找出第k个即可.但是这样的 ...
- 海量数据中找出前k大数(topk问题)
海量数据中找出前k大数(topk问题) 前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅场的心已经按捺不住了),这个问题还是建立最小 ...
- BZOJ 3110 K大数查询 | 整体二分
BZOJ 3110 K大数查询 题面 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个 ...
随机推荐
- 并发队列之ArrayBlockingQueue
上一篇我们说了并发队列中的LinkedBlockingQueue队列,这次我们看看ArrayBlockingQueue,看看名字,我们想象一下LinkedList和ArrayList的区别,我们可以知 ...
- [python] pygame安装与配置
参考 https://www.runoob.com/python/python-install.html https://blog.csdn.net/huayuhuan/article/details ...
- 02.当构造参数过多时使用builder模式
前言 <Effective Java>中文第三版,是一本关于Java基础的书,这本书不止一次有人推荐我看.其中包括我很喜欢的博客园博主五月的仓颉,他曾在自己的博文<给Java程序猿们 ...
- P1029最大公约数和最小公倍数
P1029最大公约数和最小公倍数 #include <iostream> #include <cmath> #include <algorithm> #define ...
- Zenefits CodeSprint:Knight or Knave
题意是一堆人,从1到n编号,每个人i说一句话,x.x是正数表示i说x君是个好人,x是负数表示i说x君是坏人.问这个群体中最多能有多少好人,把这种情况用字典序的方式输出(好人用A表示,坏人用B表示),希 ...
- Spark教程——(7)编写spark-sql程序读取HBase定时生成报表
plugin划红线报错: maven-scala-plugin maven-shade-plugin 查找Maven仓库,发现一个没有jar包,一个jar包无法解压缩打开,删除Maven中坏的jar包 ...
- 「SP10628 COT - Count on a tree」
主席树的综合运用题. 前置芝士 可持久化线段树:其实就是主席树了. LCA:最近公共祖先,本题需要在\(\log_2N\)及以内的时间复杂度内解决这个问题. 具体做法 主席树维护每个点到根节点这一条链 ...
- Linux centosVMware 告警系统主脚本、告警系统配置文件、告警系统负载脚本、告警系统502日志脚本、告警系统disk监控脚本、告警系统邮件引擎
一.告警系统主脚本 要求:我们的机器角色多种多样,但是所有机器上都要部署同样的监控系统,也就说所有机器不管什么角色,整个程序框架都是一致的,不同的地方在于根据不同的角色,定制不同的配置文件. 程序架构 ...
- cookie、 Session Storage 、 Local Storage
问题描述: 使用Ajax, Controller 传回来 JSON 字符串(待处理的信息) 在 Ajax 中实现页面跳转 window.location.href="/jsp/index.j ...
- Py西游攻关之基础数据类型(五)-集合
Py西游攻关之基础数据类型 - Yuan先生 https://www.cnblogs.com/yuanchenqi/articles/5782764.html 八 集合(set) 集合是一个无序的,不 ...