O(n)复杂度求区间第K大
O(n)复杂度求区间第K大
描述
给你一个数组,O(N)复杂度找出其中第K大的数.
输入
第一行包括两个数,N,K,分别代表数组大小,以及你应该找出第K大的数.
接下来N行,每行包括一个数.
输出
输出第K大的数.
下附AC代码
#include <stdio.h>
int a[1000000],b[1000000],c[1000000];
void seek(int a[],int b[],int c[],int k,int n){int i=0,j=n;int temp=a[i],count=0,d=0,e=0;for(int i=0;i<n;i++){if(a[i]==temp)count++;else if(a[i]>temp)b[d++]=a[i];else c[e++]=a[i];}if(k>d&&k<=d+count){printf("%d",temp);return;}else if(d>=k)seek(b,a,c,k,d);else seek(c,a,b,k-count-d,e);
}
int main() {int n,k;scanf("%d%d",&n,&k);for(int i=0;i<n;i++){scanf("%d",&a[i]);}seek(a,b,c,k,n);return 0;
}
问题本身不难,主要考虑随机设一个数然后把比它小的放左边,比它大的放右边,每次都能排除一定比例的元素,根据等比数列求和可知该算法为O(n)复杂度,应该可以说是平均下来最快的代码了。
PS:题目可能卡读入,用cin输入如果没有关同步的话会输入很慢,所以简单起见用scanf就好了。
O(n)复杂度求区间第K大相关推荐
- 整体二分求区间第k大模板(POJ 2104)
自己的模板,线段树实现的,可以参考一下 算法步骤 参考一下文章 http://www.cnblogs.com/dirge/articles/5810855.html https://www.cnblo ...
- hdu2852(2009多校第四场) 树状数组求区间第k大的数 两种方法
二分查找n*logn*logn 比较容易理解 1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm& ...
- HDU2665 求区间第K大 主席树
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2665 代码: //#include<bits/stdc++.h> #include< ...
- Greedy Sequence(2019南京icpc网络预选赛)主席树求区间小于k的最大值
题意:给出n个整数,构造s1,s2,s3-sn s1,s2,s3-sns1,s2,s3-sn,si sisi满足五个条件 1.s1[i]=i s1[i]=is1[i]=i 2.对于1<j< ...
- zoj 2112 树状数组 套主席树 动态求区间 第k个数
总算是把动态求区间第k个数的算法看明白了. 在主席树的基础上,如果有修改操作,则要通过套树状数组来实现任意区间求第k小的问题. 刚开始看不明白什么意思,现在有一点理解.树状数组的每个元素是一个线段树, ...
- hdu 5919--Sequence II(主席树--求区间不同数个数+区间第k大)
题目链接 Problem Description Mr. Frog has an integer sequence of length n, which can be denoted as a1,a2 ...
- c++求区间第k大数_数组中求第K大数的实现方法
问题:有一个大小为n的数组A[0,1,2,-,n-1],求其中第k大的数. 该问题是一个经典的问题,在<算法导论>中被作为单独的一节提出,而且其解决方法很好的利用了分治的思想,将时间复杂度 ...
- Dynamic Rankings——带修改区间第k大
三种做法: 1.整体二分: 二分mid 考虑小于mid的修改的影响 但是大于mid的修改可能会干掉小于mid的一些值 所以额外把一个修改变成一个值的删除和一个值的添加 这样就相互独立了! 整体二分,树 ...
- poj2104(区间第k大+离散化)
题意: 给定一个序列,求[a,b]区间第k大的数字. 思路: 主席树模板题,但是注意数据范围,需要离散化. 代码: #include<cstdio> #include<cstring ...
最新文章
- php禁止网页抓取,服务器反爬虫攻略:Apache/Nginx/PHP禁止某些User Agent抓取网站 - 龙笑天下...
- 洛谷 P2197 nim游戏
- 命令行 笔记本键盘禁用_宏碁发布Enduro系列三防笔记本电脑和平板电脑
- 详解Spring框架的依赖注入
- 如何将外部的obj模型导入OpenGL
- 数据交互什么意思_学习编程怎么样才可以不枯燥?什么是前端语言?
- vue组件弹出框点击显示隐藏
- C++学习(十三)(C语言部分)之 练习
- geotools读取shp数据的数据类型
- 登录注册判断+Mysql
- 推销计算机英语作文,2018年12月英语四级作文范文:卖电脑
- Python中字典(dict)和集合(set)区别与联系
- c++ 小游戏 NO6 跑酷游戏
- 西门子1200PLC和KTP700触摸屏控制西门子V90伺服电机例子程序
- 项目管理 软件版本号的命名格式和规则
- Day1.数据可视化-Python语法
- 基于Java+Swing实现中国象棋游戏
- phpfetion.php,php 飞信2012最新可用api 接口免费分享phpfetion_PHP教程
- httpPrinter--vue--打印
- 安卓桌面软件哪个好_有什么比较好的电脑便签软件,网上比较火的便签是哪个软件...
热门文章
- 企业微信本地开发小程序。
- P卡不安全了?还有什么卡可以绑PayPal / eBay扣费?
- Android 工具类 大全
- Device eth1 has different MAC address
- 亚马逊运营如何做好优化listing页面
- eclipse中字母大小写转换快捷键(备忘)
- RPC、SOA与微服务
- springboot ElasticSearch配置自定义转换器ElasticsearchCustomConversions
- Ubuntu20.04安装Freesurfer7.3.2记录
- STM32F103完成基于I2C协议的AHT20温湿度传感器的数据采集,并将采集的温度-湿度值通过串口输出